`UnionListReader.setPosition` throws IOOBE on a post-IPC empty List
- Langage dominant
- Java
- Étoiles
- 94
- Forks
- 152
- Merge moyen
- 3 j 16 h
- PR mergées (30 j)
- 11
Description
### Describe the bug, including details regarding any error messages, version, and platform.
On 19.0.0 (and on master), calling `setPosition` on a `ListVector` that came off the wire via IPC with `valueCount == 0` throws `IndexOutOfBoundsException`.
Some callers may hit this without touching `setPosition` themselves as
- `SingleStructReaderImpl.reader(String)` calls `setPosition(idx())` the first time a child reader on a struct is looked up.
- `UnionMapReader` inherits from `UnionListReader` and breaks the same way.
- `UnionLargeListReader` has a related variant; capacity guard seems to be missing and it fails whenever the offset buffer is shorter than `(idx + 2) * 8` bytes.
The reader code hasn't changed. `ListVector.setReaderAndWriterIndex` changes and now correctly emits the leading `[0]` offset when `valueCount == 0` (as per the Arrow spec), so the receiver's offset buffer is no longer "zero-capacity" and if block `capacity() == 0` never enters.
### Repro
The shape we actually hit — a struct with a list-typed child, struct itself having `valueCount == 0`:
```java
StructVector parent = ...; // child "l" is LIST, valueCount == 0
parent.getReader().reader("l"); // IOOBE
```
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez par UnionListReader.setPosition et retracez les appels depuis SingleStructReaderImpl.reader(String) ; comparez les chemins associés de UnionMapReader et UnionLargeListReader décrits dans l’issue. Reproduisez le cas d’une liste vide après IPC, puis vérifiez que ces readers ne lèvent plus IndexOutOfBoundsException lorsque les offsets ou la capacité sont vides ou plus courts que prévu.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- java
- Domaine
- data
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- Calme
- Clarté
- Plutôt claire
- Accessibilité débutants
- 67/100