Handles the case where InputStream.skip provides fewer bytes than requested before reaching EOF. #689
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description of changes:
InputStream implementations are allowed to skip fewer bytes than requested, and doing so does not necessarily indicate that the end of the stream has been reached. S3's
S3ObjectInputStream
has this behavior in certain cases.Before this fix, the binary reader would throw an IonException for unexpected EOF if this happened when trying to skip of a scalar value that was not entirely buffered. After the fix, the reader will continue requesting to skip bytes from the stream until EOF is definitely reached or all requested bytes have been skipped.
The test
shouldNotFailWhenAnInputStreamProvidesFewerBytesThanRequestedWithoutReachingEofWithAnUnboundedBufferAndTheReaderSkipsTheValue
is the one that reproduced the problem, and now succeeds. The fix is similar to that of #623, which handled this forInputStream.read
. At the time I thought I had theInputStream.skip
case covered as well, but it had only been covered for the oversized value case; the new test covers the case where the value to be skipped is not oversized but extends beyond the current end of the buffer. I added parameterization to other related tests to lessen the likelihood that similar issues are still lurking.By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.