Skip to content

[C++] Check that the var data length prefix fits in the buffer before reading it - #1174

Open
slachiewicz wants to merge 1 commit into
aeron-io:masterfrom
slachiewicz:cpp-var-data-length-prefix-bounds
Open

slachiewicz wants to merge 1 commit into
aeron-io:masterfrom
slachiewicz:cpp-var-data-length-prefix-bounds

Conversation

@slachiewicz

Copy link
Copy Markdown
Contributor

Length(), skip() and () read the var data length prefix before checking that it fits in the buffer, so a frame truncated inside the prefix makes them read up to sizeof(length) bytes past the end; Length() returns those bytes as the length. get() and getAsString() already advanced the position over the prefix first.

The three accessors now throw E100 when the prefix does not fit, before reading it.

Part of #969.

Verified: VarDataLengthPrefixBoundsTest fails on master (heap-buffer-overflow in payloadLength() under ASan) and passes here; sbe-tool checkstyle and test, cppbuild and cppbuild --debug-build --sanitise-build pass.

… reading it.

<x>Length(), skip<X>() and <x>() read the length prefix at the current
position, so the check must come before the read and not only on the
position computed from it.
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.

1 participant