bug: ListTypeFromJson hits undefined behavior when a list type has no "element"
Maintainer thường phản hồi trong vòng 2 ngày
Một pull request liên quan đã được merge.
- #997 của @LuciferYang — đã merge
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 78/100
Hướng nghiên cứu
Bắt đầu từ ListTypeFromJson trong src/iceberg/json_serde.cc, nơi kiểu phần tử được đọc qua bộ truy cập const json[kElement]. MapTypeFromJson trong cùng tệp đã đọc key và value thông qua GetJsonValue, vì vậy hãy sao chép mẫu đó cho kElement. Hoàn thành khi một đối tượng kiểu list không có "element" trả về JsonParseError thay vì gây ra hành vi không xác định. Bạn có thể kiểm tra bằng bước tái hiện trong issue.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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.
- Ngôn ngữ chính
- C++
- Star
- 226
- Fork
- 133
- Merge trung bình
- 5 ngày 10 giờ
- Pull request đã merge (30 ngày)
- 33
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của apache/iceberg-cpp
-
bug: ReferenceVisitor::GetReferencedFieldIds dereferences null on a bound COUNT(*)Có thể đã có người làm @LuciferYang đã nhận 10 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
apache/iceberg-cpp#978 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
bug: InMemoryCatalog skips the namespace existence check in CreateTable and RegisterTableCó thể đã có người làm @LuciferYang đã nhận 10 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
apache/iceberg-cpp#977 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
apache/iceberg-cpp#1000 · 1 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Support Iceberg table encryption (Java-compatible)Có thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 8/100
apache/iceberg-cpp#988 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 20/100
apache/iceberg-cpp#959 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
Tất cả issue của apache/iceberg-cpp
Issue tương tự
-
Add a FakeAudioIo for host testsĐang mởc++ good first issue M2: audio plumbing no hardware needed tests
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
GageLawton/noise-cancellation#23 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
objectionary/eo-graphs#85 ·
-
bug derived types format I/O medium priority semantics
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Kindly pin CUDA 12.X as required toolkit for stable release v0.3.3 compilation in CUDA systemsĐang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 68/100
facebookresearch/habitat-sim#2645 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
Maintainer thường phản hồi trong vòng 1 ngày