[Ruby] Wrong data pointer in MemoryView of a sliced array
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 74/100
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
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
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de apache/arrow
-
[C++] GetSchema labels its null check on each schema field as "DictionaryEncoding.indexType"AbiertoComponent: C++
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día
-
[C++][Python] IPC reader rejects a DictionaryEncoding without indexType, which the format allowsPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. AbiertoComponent: C++ Component: Python
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
Component: R Type: bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
apache/arrow#51695 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
[C++][Parquet] Plaintext-footer files written with AES_GCM_CTR_V1 record AES_GCM_V1 as the encryption algorithm and cannot be readPosiblemente ocupada @YusefSyed la tomó hace 5 días. AbiertoType: bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día
-
[R] Expose ignore_extra_columns and pad_short_rows CSV parse optionsPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. AbiertoComponent: R good-first-issue Type: enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
Todos los issues de apache/arrow
Issues similares
-
needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
flashinfer-ai/flashinfer#6212 ·
Los mantenedores suelen responder en 1 día
-
bug graphics
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
FlaxEngine/FlaxEngine#4295 · 2 comentarios ·
Los mantenedores suelen responder en 2 días
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
Algorithmiq/monoprop#390 ·
Los mantenedores suelen responder en 1 día
-
docs
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
8-membered-ring atrop stereo lost in 2026.09.1Posiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertobug
Dificultad 2/5 Medio día Aptitud para principiantes 86/100
Los mantenedores suelen responder en 2 días