-
Notifications
You must be signed in to change notification settings - Fork 542
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[SUREFIRE-2076] BufferOverflowException when encoding message with null runMode #529
Conversation
After the #518 is merged, you have to rebase this PR. Then we will run the CI again. |
#518 was merged, let's concentrate on this one. |
4531c19
to
f56ff83
Compare
Rebased onto latest master.
The issue should be easily reproducible with AbstractStreamEncoderTest#testStdErrStreamEmptyMessageNullRunMode. Test implemented similar way as Expected length also changed in AbstractStreamEncoderTest#shouldComputeStreamPreemptiveLength |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
@zoltanmeze This change looks fine. Pls check the method |
Looks fine to me. Checked the usages a bit, was mostly looking if long and integer counts are properly set. One thing I noticed, there is a null smartStackTrace included in encode on EventChannelEncoder#L221 but that same null string in not included in estimateBufferLength on EventChannelEncoder.java#L217. On master without these changes it's possible to get BufferOverflowException in EventChannelEncoderTest#testConsoleError by reducing message to only two characters or on this branch with empty string. Not really related to runMode, just noticed. |
@zoltanmeze |
…timation in consoleErrorLog Can potentially lead to BufferOverflowException with underestimated buffer length
Included missing null in 6e5a49c. I don't think it's worth adding a unit test for this. This was obviously just missing. There are a couple of tests covering |
If there are no objections, I would proceed with this PR. |
No objections from me |
Thx for contributing. |
Per @Tibor17's comment #518 (comment) and #518 (comment)
and after some dicsussion (see comment after #518 (comment)) pulled this into a separate issue.
Jira ticket: https://issues.apache.org/jira/browse/SUREFIRE-2076
AbstractStreamEncoder#encodeHeader stores runMode part in at least 3 bytes:
In case of null runMode the encoded part becomes
0::
(exactly 3 bytes length)The issue is that AbstractStreamEncoder#estimateBufferLength is not expecting/couting any bytes for runMode part in case of null runMode. This results in in BufferOverflowException becase the byte size of the entire message is underestimated.
Exception thrown:
Following this checklist to help us incorporate your
contribution quickly and easily:
for the change (usually before you start working on it). Trivial changes like typos do not
require a JIRA issue. Your pull request should address just this issue, without
pulling in other changes.
[SUREFIRE-XXX] - Fixes bug in ApproximateQuantiles
,where you replace
SUREFIRE-XXX
with the appropriate JIRA issue. Best practiceis to use the JIRA issue title in the pull request title and in the first line of the
commit message.
mvn clean install
to make sure basic checks pass. A more thorough check willbe performed on your pull request automatically.
mvn -Prun-its clean install
).If your pull request is about ~20 lines of code you don't need to sign an
Individual Contributor License Agreement if you are unsure
please ask on the developers list.
To make clear that you license your contribution under
the Apache License Version 2.0, January 2004
you have to acknowledge this by using the following check-box.
I hereby declare this contribution to be licenced under the Apache License Version 2.0, January 2004
In any other case, please file an Apache Individual Contributor License Agreement.