Skip to content

fix(arrow-json): validate map value nullability - #10475

Merged
Jefffrey merged 1 commit into
apache:mainfrom
subotac:fix/json-map-nullability
Jul 30, 2026
Merged

fix(arrow-json): validate map value nullability#10475
Jefffrey merged 1 commit into
apache:mainfrom
subotac:fix/json-map-nullability

Conversation

@subotac

@subotac subotac commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

AI disclosure: Codex assisted with issue analysis and running local test

Which issue does this PR close?

Rationale for this change

The JSON map decoder constructed map entries with an unchecked StructArray constructor. This bypassed child field nullability validation and allowed a null value even when the map value field was non-nullable.

What changes are included in this PR?

  • Construct map entries with StructArray::try_new_with_length so existing schema validation rejects unmasked nulls.
  • Add a regression test for a null JSON map value with a non-nullable value field.

Are these changes tested?

Yes:

  • cargo +stable fmt --all -- --check
  • cargo test -p arrow-json --all-features
  • cargo clippy --workspace --all-targets --all-features -- -D warnings
  • git diff --check

Are there any user-facing changes?

Yes. Reading a null JSON map value against a non-nullable value field now returns an error instead of producing an array that violates its schema. There are no public API changes.

@github-actions github-actions Bot added the arrow Changes to the arrow crate label Jul 29, 2026
@Jefffrey Jefffrey added the bug label Jul 29, 2026
@Jefffrey
Jefffrey merged commit 1d44370 into apache:main Jul 30, 2026
32 of 34 checks passed
@Jefffrey

Copy link
Copy Markdown
Contributor

thanks @subotac

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

arrow Changes to the arrow crate bug

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Reading json map with non-nullable value schema doesn't error if values are actually null

2 participants