Offset overflow - Lower-risk sites (opt-in features, unrealistic sizes, upstream panics)
Maintainer thường phản hồi trong vòng 2 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
Hướng nghiên cứu
Start with the specific code locations listed in the issue, such as native/core/src/execution/operators/iceberg_write.rs, ArrowWriters.scala, or the named upstream Arrow, Parquet, and DataFusion files. Read the linked parent issue #7267 and identify one overflow case and its existing tests before choosing a fix. Done means the selected case returns a safe error or handles the size correctly, with a regression test; the issue groups many separate cases, so its scope needs narrowing.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Part of #7267.
These came out of the same audit as the other new sub-issues. Each needs an opt-in feature, sizes that are unlikely in practice, or a fix upstream, so they are collected here instead of filed one by one.
Line references are for main at 4e6b12290f, DataFusion 55.2.0 and arrow 59.3.2.
Comet
- The native Iceberg writer (opt-in) concatenates pending pieces into 1000-row units (
native/core/src/execution/operators/iceberg_write.rs:1897-1909,ROWS_DIVISORat:727). Values averaging more than about 2.1 MB in one column overflow a unit withOffsetOverflowError. Iceberg's Java writer writes one row at a time. -
FixedWidthArrowFieldWriter.writeArrayElementscallsensureCapacity(count + numElements)with Int arithmetic (ArrowWriters.scala:980-1005). Past 2^31 elements in one batch the sum goes negative, the buffer is not grown, andcopyMemorywrites past its end. Comet setsarrow.enable_unsafe_memory_access=true(NativeBase.java:228), so Arrow's own bounds checks don't catch it.Math.addExactwould. - Importing JVM strings with invalid UTF-8 decodes them with U+FFFD, up to 3x the bytes, through a builder that panics on overflow (
native/common/src/utf8.rs:236-245). - DataFusion UDF results of type
Utf8View/BinaryVieware cast back with arrow'scast_view_to_byte(native/core/src/execution/planner.rs:2227-2244), which panics on overflow instead of returning an error. - Past 2^31 list elements in one batch, these panic instead of returning an error:
array_insert(array_insert.rs:309),arrays_zip(arrays_zip.rs:295),percentile(percentile.rs:205-206),pivot_first(pivot_first.rs:536-537). -
CometScalaUDFCodegen.estimatedOutputBytessums input sizes as an Int (CometScalaUDFCodegen.scala:294-308), so inputs over 2 GiB give a wrong preallocation size. -
Utils.narrowOffsets(Utils.scala:791-805) fails broadcast and cache serialization for a large-offset column over 2 GiB, for example frommapInArrowwith large variable-width types. -
ConstantColumnVectors.materialize(ArrowWriters.scala:129-143) writes a constant once per row with no size limit, the JVM side of #7247. In practice these constants are small partition and default values.
Upstream
- arrow's
MapBuilder::appendpusheskey_builder.len() as i32without a check (arrow-arraysrc/builder/map_builder.rs:176), andfinishbuilds the array unchecked (:277). Past 2^31 entries in one batch the offsets wrap silently. Comet reaches it throughstr_to_map(datafusion-spark) and the JVM shuffle's map conversion (native/shuffle/src/spark_unsafe/row.rs:1234). - parquet's DELTA_LENGTH_BYTE_ARRAY decoder panics on offset overflow (
src/arrow/array_reader/byte_array.rs:514), where the other decoders return an error. - arrow-csv builds each string column with
collect::<StringArray>()(src/reader/mod.rs:872-879), which panics past 2 GiB. Comet's native CSV scan is opt-in. - DataFusion's sort-merge join pushes to its
BatchCoalescerwith.expect(...)(src/joins/sort_merge_join/materializing_stream.rs:465,:505,:516), so a coalescer overflow (#7271) panics instead of failing with an error.
- Ngôn ngữ chính
- Scala
- Star
- 1.3k
- Fork
- 414
- Merge trung bình
- 3 ngày 5 giờ
- Pull request đã merge (30 ngày)
- 210
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
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/datafusion-comet
-
requires-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
apache/datafusion-comet#7583 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
bug priority:medium
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 73/100
apache/datafusion-comet#7559 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
-
area:writer bug priority:low
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
apache/datafusion-comet#7558 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
apache/datafusion-comet#7557 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
`rand` and `randn` with an integer seed fall back to Spark without a fallback reasonCó thể đã có người làm @galaxytemple đã nhận 3 ngày trước. Đang mởrequires-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
apache/datafusion-comet#7479 · 1 bình luận · 1 người được giao ·
Maintainer thường phản hồi trong vòng 2 ngày
Tất cả issue của apache/datafusion-comet
Issue tương tự
-
A-api C-bug S-ready-for-human
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
ergoplatform/ergo#2932 ·
Maintainer thường phản hồi trong vòng 3 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
lichess-org/lila#22454 ·
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 76/100
chipsalliance/rocket-chip#3845 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 86/100
Maintainer thường phản hồi trong vòng 13 ngày