[Ruby] Wrong data pointer in MemoryView of a sliced array
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 74/100
Direzione di ricerca
Parti da PrimitiveArrayGetter::fill in ext/arrow/memory-view.cpp, dove GetValuesSafe<uint8_t>(1) applica l'offset dell'array in byte invece che in unità di elementi. Riproduci il problema con lo snippet dell'issue (un Arrow::Int32Array tagliato e riletto tramite Fiddle::MemoryView), poi scala l'offset per la dimensione dell'elemento a larghezza fissa (come mostra lo snippet proposto nell'issue) in modo che data, item_size e byte_size siano coerenti. L'obiettivo è raggiunto quando gli slice di array primitivi multi-byte restituiscono i valori attesi; controlla la suite di test di ext/arrow per un test memory-view esistente da estendere.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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
- Lingua principale
- C++
- Stelle
- 17.2k
- Fork
- 4.3k
- Merge medio
- 4g 11h
- PR unite (30g)
- 93
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di apache/arrow
-
[C++][Python] IPC reader rejects a DictionaryEncoding without indexType, which the format allowsForse già presa Una pull request collegata a questa issue è aperta o già unita. ApertaComponent: C++ Component: Python
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
[R] Silent loss of metadata integrity for date-time and numeric attributes in write_parquet()/read_parquet()Forse già presa @james-finn-travers l’ha presa 5 giorni fa. ApertaComponent: R Type: bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
apache/arrow#51695 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
[C++][Parquet] Plaintext-footer files written with AES_GCM_CTR_V1 record AES_GCM_V1 as the encryption algorithm and cannot be readForse già presa @YusefSyed l’ha presa 6 giorni fa. ApertaType: bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
I maintainer di solito rispondono entro 1 giorno
-
[R] Expose ignore_extra_columns and pad_short_rows CSV parse optionsForse già presa Una pull request collegata a questa issue è aperta o già unita. ApertaComponent: R good-first-issue Type: enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
Component: C++
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di apache/arrow
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
hipRTC lit tests compile against /opt/rocm's LLVM instead of the ROCm under test (ci/ hardcodes LLVM_PATH)Forse già presa @bernardogv l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
-
請增加教學:數字後的句號Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 79/100
I maintainer di solito rispondono entro 1 giorno