bug: ListTypeFromJson hits undefined behavior when a list type has no "element"
I maintainer di solito rispondono entro 2 giorni
Una pull request collegata è già stata integrata.
- #997 di @LuciferYang — integrata
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
Direzione di ricerca
Inizia da ListTypeFromJson in src/iceberg/json_serde.cc, dove il tipo degli elementi viene letto con l'accessore const json[kElement]. MapTypeFromJson nello stesso file legge già key e value tramite GetJsonValue, quindi copia lo stesso schema per kElement. È completato quando un oggetto di tipo lista senza "element" restituisce JsonParseError invece di causare un comportamento indefinito, cosa che puoi verificare con la riproduzione nell'issue.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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.
- Lingua principale
- C++
- Stelle
- 226
- Fork
- 133
- Merge medio
- 5g 10h
- PR unite (30g)
- 33
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
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/iceberg-cpp
-
bug: ReferenceVisitor::GetReferencedFieldIds dereferences null on a bound COUNT(*)Forse già presa @LuciferYang l’ha presa 10 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
apache/iceberg-cpp#978 ·
I maintainer di solito rispondono entro 2 giorni
-
bug: InMemoryCatalog skips the namespace existence check in CreateTable and RegisterTableForse già presa @LuciferYang l’ha presa 10 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
apache/iceberg-cpp#977 ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
apache/iceberg-cpp#1000 · 1 commento · 1 reazione ·
I maintainer di solito rispondono entro 2 giorni
-
Support Iceberg table encryption (Java-compatible)Forse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 8/100
apache/iceberg-cpp#988 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
apache/iceberg-cpp#959 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
Tutte le issue di apache/iceberg-cpp
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
objectionary/eo-graphs#85 ·
-
bug derived types format I/O medium priority semantics
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
CartLineConstraint Jacobian always writes 6 rows, overruns when indices has fewer than 6 entriesAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
tesseract-robotics/trajopt#618 ·
I maintainer di solito rispondono entro 1 giorno
-
backend bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
mysql/mysql-server#847 ·
I maintainer di solito rispondono entro 3 giorni