Unidata / netcdf-java

The Unidata netcdf-java library
https://docs.unidata.ucar.edu/netcdf-java/current/userguide/index.html
BSD 3-Clause "New" or "Revised" License
142 stars 69 forks source link

Fix invalid checksum error #1380

Closed tdrwenski closed 3 weeks ago

tdrwenski commented 3 weeks ago

Description of Changes

Should fix https://github.com/Unidata/netcdf-java/issues/1199.

When a double variable has multiple filters like Deflate, Shuffle, and Checksum, the Checksum was throwing an "invalid checksum" error on reading. This was because the Shuffle algorithm had a condition that it wasn't applied unless the chunk of data had a size that was a multiple of the element size. This condition was false for the case of 8 byte doubles with a checksum, which is represented as 4 bytes at the end of the chunk.

This PR allows the Shuffle encoding and decoding to apply to chunks of any size, and ensures the leftover bytes that aren't affected by the shuffle remain the same. This is in line with the netcdf-c library behavior.