diff options
| author | Rui Paulo <rpaulo@FreeBSD.org> | 2015-02-06 05:11:18 +0000 |
|---|---|---|
| committer | Rui Paulo <rpaulo@FreeBSD.org> | 2015-02-06 05:11:18 +0000 |
| commit | d6a9376028870754d7d3de3f626c1deb6df81092 (patch) | |
| tree | d09ea80ca5b38338fbfb381b7d0818f486343403 /src/liblzma/rangecoder/range_decoder.h | |
| parent | 9db922924cf9ffc4f7f66c21c93ceca8eb2b5259 (diff) | |
Notes
Diffstat (limited to 'src/liblzma/rangecoder/range_decoder.h')
| -rw-r--r-- | src/liblzma/rangecoder/range_decoder.h | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/liblzma/rangecoder/range_decoder.h b/src/liblzma/rangecoder/range_decoder.h index fb96180fb399..e0b051fac2d2 100644 --- a/src/liblzma/rangecoder/range_decoder.h +++ b/src/liblzma/rangecoder/range_decoder.h @@ -25,20 +25,26 @@ typedef struct { /// Reads the first five bytes to initialize the range decoder. -static inline bool +static inline lzma_ret rc_read_init(lzma_range_decoder *rc, const uint8_t *restrict in, size_t *restrict in_pos, size_t in_size) { while (rc->init_bytes_left > 0) { if (*in_pos == in_size) - return false; + return LZMA_OK; + + // The first byte is always 0x00. It could have been omitted + // in LZMA2 but it wasn't, so one byte is wasted in every + // LZMA2 chunk. + if (rc->init_bytes_left == 5 && in[*in_pos] != 0x00) + return LZMA_DATA_ERROR; rc->code = (rc->code << 8) | in[*in_pos]; ++*in_pos; --rc->init_bytes_left; } - return true; + return LZMA_STREAM_END; } |
