bug: ReferenceVisitor::GetReferencedFieldIds dereferences null on a bound COUNT(*)
Les mainteneurs répondent en général sous 2 jours
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 82/100
Piste de recherche
Commencez par src/iceberg/expression/binder.cc, en particulier ReferenceVisitor::Aggregate, et comparez la manière dont BoundAggregate::reference() gère COUNT(*) avec la construction de l’agrégat dans src/iceberg/expression/aggregate.cc. Vérifiez la couverture existante des agrégats dans aggregate_test.cc ; le travail est terminé lorsque l’appel à GetReferencedFieldIds sur un COUNT(*) lié ne provoque plus de plantage et ne contribue à aucun identifiant de champ.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Summary
ReferenceVisitor::GetReferencedFieldIds (exported via ICEBERG_EXPORT) crashes with a SIGSEGV when the expression tree contains a bound COUNT(*). ReferenceVisitor::Aggregate runs referenced_field_ids_.insert(aggregate->reference()->field_id()), but a COUNT(*) aggregate has a null term, so reference() returns nullptr and ->field_id() dereferences it.
Root Cause
CountStarAggregate is constructed with a null term (src/iceberg/expression/aggregate.cc), and BoundAggregate::reference() returns term() ? term()->reference() : nullptr, so it is nullptr for COUNT(*). src/iceberg/expression/binder.cc dereferences it with no guard. Visit() routes any bound aggregate to Aggregate(), so binding Expressions::CountStar() and calling GetReferencedFieldIds segfaults. COUNT(col) / MAX / MIN have non-null terms and are unaffected.
Impact
No in-tree scan path passes aggregates to GetReferencedFieldIds today (table_scan.cc and manifest_group.cc pass row filters), so the crash lands on a library consumer that does aggregate pushdown through the exported API. COUNT(*) is the most common aggregate, and binding it is a supported, tested workflow (aggregate_test.cc). Java's ReferenceVisitor base throws UnsupportedOperationException on aggregates, a catchable error; the C++ port instead crashes the process.
Proposed Fix
Insert the field id only when reference() is non-null. COUNT(*) then contributes no field ids, which is the correct result for field projection (counting rows reads no columns).
- Langage dominant
- C++
- Étoiles
- 226
- Forks
- 133
- Merge moyen
- 3 j 13 h
- PR mergées (30 j)
- 27
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
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/iceberg-cpp
-
bug: ListTypeFromJson hits undefined behavior when a list type has no "element"Peut-être pris @LuciferYang l’a pris il y a 1 jour. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
apache/iceberg-cpp#996 ·
Les mainteneurs répondent en général sous 2 jours
-
bug: InMemoryCatalog skips the namespace existence check in CreateTable and RegisterTablePeut-être pris @LuciferYang l’a pris il y a 10 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
apache/iceberg-cpp#977 ·
Les mainteneurs répondent en général sous 2 jours
-
Support Iceberg table encryption (Java-compatible)Peut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 8/100
apache/iceberg-cpp#988 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours
-
bug: expression JSON deserialization throws an uncaught exception on a non-string "type"/"term"Peut-être pris @LuciferYang l’a pris il y a 10 jours. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 75/100
apache/iceberg-cpp#979 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 20/100
apache/iceberg-cpp#959 · 1 commentaire ·
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de apache/iceberg-cpp
Issues similaires
-
Incorrect Link in README.mdPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 95/100
flameshot-org/flameshot#4996 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 64/100
utopia-rise/godot-jvm#1004 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
Les mainteneurs répondent en général sous 3 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
Les mainteneurs répondent en général sous 1 jour
-
chore(build): TxCoordinator.cpp uses the deprecated shared_ptr atomic free functionsPeut-être pris @w5jwp l’a pris aujourd’hui. Ouverte
Difficulté 1/5 Moins d'une heure Accessibilité débutants 84/100
aethersdr/AetherSDR#6368 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour