summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorALONSO Laurent <laurent.alonso@inria.fr>2021-08-18 15:44:43 +0200
committerALONSO Laurent <laurent.alonso@inria.fr>2021-08-18 15:44:43 +0200
commitda1f4b413e488bbeaf3d9e7cba1d7bcc7611beea (patch)
tree8c3d27b30cce938d3a1e1d264c5a5ef8f8a15b14
parent26ca191664e1189789f6bb9578adc57c9fb75228 (diff)
IWASnappyStream: allow compressed blocklength to be greater than 65535...
Change-Id: Id3622af6e0e5fd2c49bdafd712ee4afac85c26ec
-rw-r--r--src/lib/IWASnappyStream.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/lib/IWASnappyStream.cpp b/src/lib/IWASnappyStream.cpp
index 95e4d17..cf56c15 100644
--- a/src/lib/IWASnappyStream.cpp
+++ b/src/lib/IWASnappyStream.cpp
@@ -150,8 +150,9 @@ RVNGInputStreamPtr_t uncompress(const RVNGInputStreamPtr_t &input)
while (!input->isEnd())
{
readU8(input);
- const unsigned long blockLength = readU16(input);
- readU8(input);
+ unsigned long blockLength = readU16(input);
+ // rare, but the blockLength can be greater than 65536, ie. I find 06 00 01 in one file
+ blockLength+=65536*readU8(input);
if (!uncompressBlock(input, (std::min)(blockLength, getRemainingLength(input)), data))
throw CompressionException();
}