Resolves issue #65 - treat classification byte as unsigned char #66
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.
All 8 bits of the classification byte have the potential to be used, in both the older formats (0..5) and in the newer formats (6..10). The code had been reading this byte into a signed byte, and then casting it to a short.
For the older formats, this would mean that if the 'Withheld' bit was set (bit index 7), this bit would be interpreted as a sign bit, and effectively be lost in the cast (I think!).
For the newer formats, where the entire byte is used for the classification value, any classifications > 127 are being incorrectly read as negative values.
I think the same issue applies in the compressed decoders, because the uncompressed/decoded classification value was being cast down to a signed byte, when it should be treated as an unsigned byte.
Looking at the original C++ copy of this code, a U8 is used for all of the decoding and reading of the classification byte. These code changes are attempting to produce the equivalent unsigned byte treatment in the java.