summaryrefslogtreecommitdiffstats
path: root/lz4frame.c
diff options
context:
space:
mode:
authorYann Collet <yann.collet.73@gmail.com>2014-09-06 21:48:03 (GMT)
committerYann Collet <yann.collet.73@gmail.com>2014-09-06 21:48:03 (GMT)
commit04f5b17b7227bbc3ee788f869b55641f6c776b08 (patch)
treea282a5719b5f39fdb5038d57fdb167751f22c4ce /lz4frame.c
parent03bc760af361ae95187a8d3475be362293328884 (diff)
downloadlz4-04f5b17b7227bbc3ee788f869b55641f6c776b08.zip
lz4-04f5b17b7227bbc3ee788f869b55641f6c776b08.tar.gz
lz4-04f5b17b7227bbc3ee788f869b55641f6c776b08.tar.bz2
Improved frame decompression test
Fixed : frame decompression bug
Diffstat (limited to 'lz4frame.c')
-rw-r--r--lz4frame.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/lz4frame.c b/lz4frame.c
index 866c922..19b228c 100644
--- a/lz4frame.c
+++ b/lz4frame.c
@@ -866,7 +866,7 @@ goto_getCBlock:
selectedIn = srcPtr;
srcPtr += nextCBlockSize;
dctxPtr->dStage = dstage_decodeCBlock;
- break;
+ goto goto_decodeCBlock; /* break risks leaving the while loop */
}
case dstage_storeCBlock:
{
@@ -881,6 +881,7 @@ goto_getCBlock:
/* break; break unnecessary because it follows */
}
case dstage_decodeCBlock:
+goto_decodeCBlock:
{
int decodedSize;
if ((size_t)(dstEnd-dstPtr) < dctxPtr->maxBlockSize) /* not enough room : decode into tmpOut */
@@ -937,14 +938,14 @@ goto_getSuffix:
case dstage_storeSuffix:
{
size_t sizeToCopy = 4 - dctxPtr->tmpInSize;
- if (sizeToCopy < (size_t)(srcEnd - srcPtr)) sizeToCopy = srcEnd - srcPtr;
+ if (sizeToCopy > (size_t)(srcEnd - srcPtr)) sizeToCopy = srcEnd - srcPtr;
memcpy(dctxPtr->tmpIn + dctxPtr->tmpInSize, srcPtr, sizeToCopy);
srcPtr += sizeToCopy;
dctxPtr->tmpInSize += sizeToCopy;
if (dctxPtr->tmpInSize < 4) break; /* not enough input to read suffix */
selectedIn = dctxPtr->tmpIn;
dctxPtr->dStage = dstage_checkSuffix;
- break;
+ /* break; useless, it follows; would need a goto anyway */
}
case dstage_checkSuffix:
goto_checkSuffix: