Fixed : LZ4_compress_limitedOutput() bug, as reported by Christopher Speller
This commit is contained in:
parent
3477cbac73
commit
e68d7dcf22
@ -642,10 +642,10 @@ _next_match:
|
||||
ip += MINMATCH + matchLength;
|
||||
}
|
||||
|
||||
if ((outputLimited) && (unlikely(op + (1 + LASTLITERALS) + (matchLength>>8) > olimit)))
|
||||
return 0; /* Check output limit */
|
||||
if (matchLength>=ML_MASK)
|
||||
{
|
||||
if ((outputLimited) && (unlikely(op + (1 + LASTLITERALS) + (matchLength>>8) > olimit)))
|
||||
return 0; /* Check output limit */
|
||||
*token += ML_MASK;
|
||||
matchLength -= ML_MASK;
|
||||
for (; matchLength >= 510 ; matchLength-=510) { *op++ = 255; *op++ = 255; }
|
||||
|
@ -1,6 +1,7 @@
|
||||
/*
|
||||
bench.c - Demo program to benchmark open-source compression algorithm
|
||||
Copyright (C) Yann Collet 2012-2014
|
||||
Copyright (C) Yann Collet 2012-2015
|
||||
|
||||
GPL v2 License
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@ -18,8 +19,9 @@
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
You can contact the author at :
|
||||
- LZ4 homepage : http://fastcompression.blogspot.com/p/lz4.html
|
||||
- LZ4 source repository : http://code.google.com/p/lz4/
|
||||
- LZ4 source repository : http://code.google.com/p/lz4
|
||||
- LZ4 source mirror : https://github.com/Cyan4973/lz4
|
||||
- LZ4 public forum : https://groups.google.com/forum/#!forum/lz4c
|
||||
*/
|
||||
|
||||
//**************************************
|
||||
|
@ -486,31 +486,30 @@ static int FUZ_test(U32 seed, const U32 nbCycles, const U32 startCycle, const do
|
||||
ret = LZ4_compressHC_limitedOutput_withStateHC(stateLZ4HC, block, compressedBuffer, blockSize, HCcompressedSize);
|
||||
FUZ_CHECKTEST(ret==0, "LZ4_compressHC_limitedOutput_withStateHC() failed despite sufficient space");
|
||||
|
||||
/* Test compression with just one missing byte into output buffer => must fail */
|
||||
FUZ_DISPLAYTEST;
|
||||
compressedBuffer[compressedSize-1] = 0;
|
||||
ret = LZ4_compress_limitedOutput(block, compressedBuffer, blockSize, compressedSize-1);
|
||||
FUZ_CHECKTEST(ret, "LZ4_compress_limitedOutput should have failed (output buffer too small by 1 byte)");
|
||||
FUZ_CHECKTEST(compressedBuffer[compressedSize-1], "LZ4_compress_limitedOutput overran output buffer")
|
||||
|
||||
/* Test HC compression with just one missing byte into output buffer => must fail */
|
||||
FUZ_DISPLAYTEST;
|
||||
compressedBuffer[HCcompressedSize-1] = 0;
|
||||
ret = LZ4_compressHC_limitedOutput(block, compressedBuffer, blockSize, HCcompressedSize-1);
|
||||
FUZ_CHECKTEST(ret, "LZ4_compressHC_limitedOutput should have failed (output buffer too small by 1 byte)");
|
||||
FUZ_CHECKTEST(compressedBuffer[HCcompressedSize-1], "LZ4_compressHC_limitedOutput overran output buffer")
|
||||
|
||||
/* Test compression with just multiple missing byte into output buffer => must fail */
|
||||
/* Test compression with missing bytes into output buffer => must fail */
|
||||
FUZ_DISPLAYTEST;
|
||||
{
|
||||
int missingBytes = (FUZ_rand(&randState) % 0x3F) + 1;
|
||||
if (missingBytes >= compressedSize) missingBytes = compressedSize-1;
|
||||
missingBytes += !missingBytes; /* avoid special case missingBytes==0 */
|
||||
compressedBuffer[compressedSize-missingBytes] = 0;
|
||||
ret = LZ4_compress_limitedOutput(block, compressedBuffer, blockSize, compressedSize-missingBytes);
|
||||
FUZ_CHECKTEST(ret, "LZ4_compress_limitedOutput should have failed (output buffer too small by %i byte)", missingBytes);
|
||||
FUZ_CHECKTEST(compressedBuffer[compressedSize-missingBytes], "LZ4_compress_limitedOutput overran output buffer ! (%i missingBytes)", missingBytes)
|
||||
}
|
||||
|
||||
/* Test HC compression with missing bytes into output buffer => must fail */
|
||||
FUZ_DISPLAYTEST;
|
||||
{
|
||||
int missingBytes = (FUZ_rand(&randState) % 0x3F) + 1;
|
||||
if (missingBytes >= HCcompressedSize) missingBytes = HCcompressedSize-1;
|
||||
missingBytes += !missingBytes; /* avoid special case missingBytes==0 */
|
||||
compressedBuffer[HCcompressedSize-missingBytes] = 0;
|
||||
ret = LZ4_compressHC_limitedOutput(block, compressedBuffer, blockSize, HCcompressedSize-missingBytes);
|
||||
FUZ_CHECKTEST(ret, "LZ4_compressHC_limitedOutput should have failed (output buffer too small by %i byte)", missingBytes);
|
||||
FUZ_CHECKTEST(compressedBuffer[HCcompressedSize-missingBytes], "LZ4_compressHC_limitedOutput overran output buffer ! (%i missingBytes)", missingBytes)
|
||||
}
|
||||
|
||||
|
||||
/********************/
|
||||
/* Dictionary tests */
|
||||
|
Loading…
Reference in New Issue
Block a user