bug: ListTypeFromJson hits undefined behavior when a list type has no "element"
Maintainer antworten meist innerhalb von 2 Tagen
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 78/100
Rechercherichtung
Beginne in ListTypeFromJson in src/iceberg/json_serde.cc, wo der Elementtyp über den const-Zugriff json[kElement] gelesen wird. MapTypeFromJson in derselben Datei liest key und value bereits über GetJsonValue, also übernimm dieses Muster für kElement. Fertig ist es, wenn ein Listentyp-Objekt ohne "element" JsonParseError zurückgibt, statt undefiniertes Verhalten auszulösen. Das kannst du mit der Reproduktion aus dem Issue prüfen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Summary
ListTypeFromJson in src/iceberg/json_serde.cc reads the element type with the const json[kElement] accessor and never checks that the key exists. For a list type object without "element", nlohmann's const operator[] is undefined behavior: with assertions enabled it aborts on JSON_ASSERT(it != m_data.m_value.object->end()), and under NDEBUG it dereferences the end iterator.
Reproduction
auto json = R"({"type":"list","element-id":1,"element-required":true})"_json;
auto result = TypeFromJson(json);
// Debug build: Assertion failed: (it != m_data.m_value.object->end()), function operator[], file json.hpp
Impact
Every list type goes through TypeFromJson, so a schema with a list-typed field that lacks "element" hits this whether the list is top level or nested in a struct, map or list. SchemaFromJson reaches it when parsing table metadata schemas, the add-schema table update, and the REST CreateTableRequest. Per SECURITY-THREAT-MODEL.md catalog-supplied metadata is trusted input, so this is a robustness issue rather than a security one.
Proposed Fix
Read the key with GetJsonValue<nlohmann::json>(json, kElement), the way MapTypeFromJson reads key and value, so a missing key returns JsonParseError.
Raised in https://github.com/apache/iceberg-cpp/pull/982#pullrequestreview-5477946927.
- Vorherrschende Sprache
- C++
- Sterne
- 226
- Forks
- 133
- Ø Merge
- 3 T. 13 Std.
- Gemergte PRs (30 T.)
- 27
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus apache/iceberg-cpp
-
bug: ReferenceVisitor::GetReferencedFieldIds dereferences null on a bound COUNT(*)Evtl. vergeben @LuciferYang hat das vor 10 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
apache/iceberg-cpp#978 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
bug: InMemoryCatalog skips the namespace existence check in CreateTable and RegisterTableEvtl. vergeben @LuciferYang hat das vor 10 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
apache/iceberg-cpp#977 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Support Iceberg table encryption (Java-compatible)Evtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offen
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 8/100
apache/iceberg-cpp#988 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 2 Tagen
-
bug: expression JSON deserialization throws an uncaught exception on a non-string "type"/"term"Evtl. vergeben @LuciferYang hat das vor 10 Tagen übernommen. Offen
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 75/100
apache/iceberg-cpp#979 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 20/100
apache/iceberg-cpp#959 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 2 Tagen
Alle Issues in apache/iceberg-cpp
Ähnliche Issues
-
Incorrect Link in README.mdEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offen
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 95/100
flameshot-org/flameshot#4996 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 64/100
utopia-rise/godot-jvm#1004 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
Maintainer antworten meist innerhalb von 3 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
Maintainer antworten meist innerhalb von 1 Tag
-
chore(build): TxCoordinator.cpp uses the deprecated shared_ptr atomic free functionsEvtl. vergeben @w5jwp hat das heute übernommen. Offen
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 84/100
aethersdr/AetherSDR#6368 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag