Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[Ruby] Wrong data pointer in MemoryView of a sliced array

Abierto Apto para principiantes
#52,021 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@gitedmond ya está trabajando en esto.

Desde el 7/10/2026.

  • #52286 de @gitedmond — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
74/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
cpp, ruby
Área
data

Línea de trabajo

Comienza en PrimitiveArrayGetter::fill en ext/arrow/memory-view.cpp, donde GetValuesSafe<uint8_t>(1) aplica el desplazamiento del array en bytes en lugar de en unidades de elementos. Reproduce el problema con el fragmento del issue (un Arrow::Int32Array troceado, leído de vuelta a través de Fiddle::MemoryView), luego escala el desplazamiento por el tamaño del elemento de ancho fijo (como muestra el fragmento propuesto en el issue) para que data, item_size y byte_size sean coherentes. La tarea está completa cuando los trozos de arrays primitivos de varios bytes desempaquetan los valores esperados; revisa la suite de pruebas de ext/arrow en busca de una prueba de memory-view existente que ampliar.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Component: Ruby Type: bug
Describe the bug, including details regarding any error messages, version, and platform.

For a sliced primitive array, the data pointer of the exported
MemoryView is advanced by offset bytes instead of
offset × element size bytes, so values wider than one byte come
out wrong (no error is raised).

require "arrow"
require "fiddle"

a = Arrow::Int32Array.new([0, 1, 2, 3, 4, 5, 6, 7])
p Fiddle::MemoryView.new(a.slice(1, 3)).to_s.unpack("l*")
# => [16777216, 33554432, 50331648]   expected [1, 2, 3]
p Fiddle::MemoryView.new(a.slice(4, 3)).to_s.unpack("l*")
# => [1, 2, 3]                         expected [4, 5, 6]

The cause is GetValuesSafe<uint8_t>(1) in PrimitiveArrayGetter::fill
(ext/arrow/memory-view.cpp): it adds the offset in units of uint8_t.
The offset should be scaled by the element width.

A possible fix is to take the buffer start and scale the offset by the
element width:

const auto type =
  std::static_pointer_cast<const arrow::FixedWidthType>(array.type());
view_->item_size = type->bit_width() / 8;
const auto base = array_data->GetValuesSafe<uint8_t>(1, 0);
const auto data = base + array_data->offset * view_->item_size;
view_->data = const_cast<void *>(reinterpret_cast<const void *>(data));
view_->byte_size = view_->item_size * array.length();

red-arrow 25.0.1, Ruby 3.4.1, macOS (arm64).

Component(s)

Ruby

Lenguaje dominante
C++
Estrellas
17.2k
Forks
4.3k
Merge medio
4 d 5 h
PR fusionados (30 d)
101

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de apache/arrow

Todos los issues de apache/arrow

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.