`UnionListReader.setPosition` throws IOOBE on a post-IPC empty List
Les mainteneurs répondent en général sous 2 jours
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 67/100
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.
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)callssetPosition(idx())the first time a child reader on a struct is looked up.UnionMapReaderinherits fromUnionListReaderand breaks the same way.UnionLargeListReaderhas a related variant; capacity guard seems to be missing and it fails whenever the offset buffer is shorter than(idx + 2) * 8bytes.
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:
StructVector parent = ...; // child "l" is LIST<INT>, valueCount == 0
parent.getReader().reader("l"); // IOOBE
- Langage dominant
- Java
- Étoiles
- 97
- Forks
- 158
- Merge moyen
- 7 j 19 h
- PR mergées (30 j)
- 26
Préparer son environnement
- Fournit un Dockerfile ou un fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de apache/arrow-java
-
DictionaryEncoder.decode accepts out-of-range dictionary indicesPeut-être pris @Arawoof06 l’a pris il y a 48 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
apache/arrow-java#1261 ·
Les mainteneurs répondent en général sous 2 jours
-
ArrowFlightJdbcArray.getArray(index, count) can read past the end of the array slicePeut-être pris @Arawoof06 l’a pris il y a 77 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
apache/arrow-java#1236 ·
Les mainteneurs répondent en général sous 2 jours
-
[Java][JDBC] ClobConsumer writes past VarCharVector data buffer for large CLOBsPeut-être pris @Arawoof06 l’a pris il y a 82 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
apache/arrow-java#1230 ·
Les mainteneurs répondent en général sous 2 jours
-
Byte-array elements leak in `FromSchemaByteArray()`Peut-être pris @PG1204 l’a pris il y a 73 jours. OuverteType: bug
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
apache/arrow-java#1205 ·
Les mainteneurs répondent en général sous 2 jours
-
[Java][IPC] AbstractCompressionCodec.compress() writes prefix=0 for empty buffers, incompatible with C++/Python readersPeut-être pris @PG1204 l’a pris il y a 73 jours. OuverteType: bug
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
apache/arrow-java#1196 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de apache/arrow-java
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
-
area/docs
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
Les mainteneurs répondent en général sous 1 jour
-
BoxChart rejects valid List.of data with NullPointerExceptionPeut-être pris @PHJ2000 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100