Skip to content

GH-1236: fix out-of-slice read in ArrowFlightJdbcArray.checkBoundaries#1237

Open
Arawoof06 wants to merge 1 commit into
apache:mainfrom
Arawoof06:jdbc-array-slice-bounds
Open

GH-1236: fix out-of-slice read in ArrowFlightJdbcArray.checkBoundaries#1237
Arawoof06 wants to merge 1 commit into
apache:mainfrom
Arawoof06:jdbc-array-slice-bounds

Conversation

@Arawoof06

Copy link
Copy Markdown
Contributor

What's Changed

checkBoundaries validates the caller index against startOffset + valuesCount, but index is relative to the start of the array and both call sites add startOffset to it only after the check, so the accepted range is too long by exactly startOffset elements. getArray and getResultSet then read that far past the end of the row's slice. AbstractArrowFlightJdbcListVectorAccessor constructs these from the offsets of the list element being read, so any row of a list column not starting at child offset 0 hands back values belonging to neighbouring rows of the shared child vector, and past the child's valueCount whatever is in allocated-but-unwritten memory. The bound belongs on the relative index, so it is compared against valuesCount instead; that is the same expression as today when startOffset is 0, which is why the existing tests all pass unchanged and only the offset case gets tighter. Added a regression test for each of the two entry points, both of which fail on main.

Closes #1236.

@github-actions

Copy link
Copy Markdown

Thank you for opening a pull request!

Please label the PR with one or more of:

  • bug-fix
  • chore
  • dependencies
  • documentation
  • enhancement

Also, add the 'breaking-change' label if appropriate.

See CONTRIBUTING.md for details.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ArrowFlightJdbcArray.getArray(index, count) can read past the end of the array slice

1 participant