From 3a9427237dae41c0abd0a07d8ac862cbb9a037c3 Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Wed, 2 Jul 2014 18:02:29 +0100 Subject: Stronger fuzzer tests Stronger fix 134 --- lz4.c | 8 ++++---- programs/fuzzer.c | 55 +++++++++++++++++++++++++++++++++++++------------------ 2 files changed, 41 insertions(+), 22 deletions(-) diff --git a/lz4.c b/lz4.c index c0b6c1a..482a8ed 100644 --- a/lz4.c +++ b/lz4.c @@ -923,8 +923,8 @@ FORCE_INLINE int LZ4_decompress_generic( } while (likely((endOnInput)?ipLZ4_MAX_INPUT_SIZE)) goto _output_error; /* overflow detection */ - if ((sizeof(void*)==4) && unlikely(op+length iend-LASTLITERALS)) goto _output_error; + if ((endOnInput) && (ip > iend-LASTLITERALS)) goto _output_error; s = *ip++; length += s; } while (s==255); //if ((sizeof(void*)==4) && unlikely(length>LZ4_MAX_INPUT_SIZE)) goto _output_error; /* overflow detection */ - if ((sizeof(void*)==4) && unlikely(op+length 0) // (size_t) 0x80000000) { printf("Testing memory buffer address %X , ", (U32)(size_t)(buffers[nbBuff])); printf("Creating a payload designed to fail\n"); - buffers[++nbBuff] = (char*)malloc(64 MB); + buffers[++nbBuff] = (char*)malloc(BLOCKSIZE_I134); if (buffers[nbBuff]==NULL) { - printf("failed to test (lack of memory)\n"); + printf("failed to test (no more memory)\n"); + for (i=0 ; i=2) + { + output = buffers[nbBuff-2]; + memset(input, 0, BLOCKSIZE_I134); + input[0] = 0xF0; // Literal length overflow + input[1] = 0xFF; + input[2] = 0xFF; + input[3] = 0xFF; + r = LZ4_decompress_safe(input, output, nbOf255+64, BLOCKSIZE_I134); + printf(" Literal overflow passed (return = %i < 0)\n",r); + input[0] = 0x1F; // Match length overflow + input[1] = 0x01; + input[2] = 0x01; + input[3] = 0x00; + r = LZ4_decompress_safe(input, output, nbOf255+64, BLOCKSIZE_I134); + printf(" Match overflow passed (return = %i < 0)\n",r); + } } + free (buffers[nbBuff]); nbBuff--; } } - for (i=0 ; i