From: Yann Collet Date: Wed, 24 Oct 2018 17:36:06 +0000 (-0700) Subject: fixed warnings in testpools X-Git-Tag: v1.3.8~66^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=debff3929b285818b925711189d2a6ed2ffd0af1;p=thirdparty%2Fzstd.git fixed warnings in testpools --- diff --git a/lib/decompress/zstd_decompress.c b/lib/decompress/zstd_decompress.c index fffcc34dd..54b9bf70d 100644 --- a/lib/decompress/zstd_decompress.c +++ b/lib/decompress/zstd_decompress.c @@ -994,6 +994,13 @@ typedef struct { } seqState_t; +/* ZSTD_execSequenceLast7(): + * exceptional case : decompress a match starting within last 7 bytes of output buffer. + * requires more careful checks, to ensure there is no overflow. + * performance does not matter though. + * note : this case is supposed to be never generated "naturally" by reference encoder, + * since in most cases it needs at least 8 bytes to look for a match. + * but it's allowed by the specification. */ FORCE_NOINLINE size_t ZSTD_execSequenceLast7(BYTE* op, BYTE* const oend, seq_t sequence, @@ -1003,21 +1010,14 @@ size_t ZSTD_execSequenceLast7(BYTE* op, BYTE* const oLitEnd = op + sequence.litLength; size_t const sequenceLength = sequence.litLength + sequence.matchLength; BYTE* const oMatchEnd = op + sequenceLength; /* risk : address space overflow (32-bits) */ - BYTE* const oend_w = oend - WILDCOPY_OVERLENGTH; const BYTE* const iLitEnd = *litPtr + sequence.litLength; const BYTE* match = oLitEnd - sequence.offset; /* check */ - if (oMatchEnd>oend) return ERROR(dstSize_tooSmall); /* last match must start at a minimum distance of WILDCOPY_OVERLENGTH from oend */ - if (iLitEnd > litLimit) return ERROR(corruption_detected); /* over-read beyond lit buffer */ - if (oLitEnd <= oend_w) return ERROR(GENERIC); /* Precondition */ + if (oMatchEnd>oend) return ERROR(dstSize_tooSmall); /* last match must fit within dstBuffer */ + if (iLitEnd > litLimit) return ERROR(corruption_detected); /* try to read beyond literal buffer */ /* copy literals */ - if (op < oend_w) { - ZSTD_wildcopy(op, *litPtr, oend_w - op); - *litPtr += oend_w - op; - op = oend_w; - } while (op < oLitEnd) *op++ = *(*litPtr)++; /* copy Match */ diff --git a/tests/poolTests.c b/tests/poolTests.c index 9661b5299..8b9a47002 100644 --- a/tests/poolTests.c +++ b/tests/poolTests.c @@ -30,7 +30,7 @@ struct data { size_t i; }; -void fn(void *opaque) { +static void fn(void *opaque) { struct data *data = (struct data *)opaque; ZSTD_pthread_mutex_lock(&data->mutex); data->data[data->i] = data->i; @@ -38,7 +38,7 @@ void fn(void *opaque) { ZSTD_pthread_mutex_unlock(&data->mutex); } -int testOrder(size_t numThreads, size_t queueSize) { +static int testOrder(size_t numThreads, size_t queueSize) { struct data data; POOL_ctx *ctx = POOL_create(numThreads, queueSize); ASSERT_TRUE(ctx); @@ -63,13 +63,13 @@ int testOrder(size_t numThreads, size_t queueSize) { /* --- test deadlocks --- */ -void waitFn(void *opaque) { +static void waitFn(void *opaque) { (void)opaque; UTIL_sleepMilli(1); } /* Tests for deadlock */ -int testWait(size_t numThreads, size_t queueSize) { +static int testWait(size_t numThreads, size_t queueSize) { struct data data; POOL_ctx *ctx = POOL_create(numThreads, queueSize); ASSERT_TRUE(ctx); @@ -92,7 +92,7 @@ typedef struct { ZSTD_pthread_cond_t cond; } poolTest_t; -void waitLongFn(void *opaque) { +static void waitLongFn(void *opaque) { poolTest_t* test = (poolTest_t*) opaque; UTIL_sleepMilli(10); ZSTD_pthread_mutex_lock(&test->mut); @@ -167,7 +167,7 @@ typedef struct { int val; } abruptEndCanary_t; -void waitIncFn(void *opaque) { +static void waitIncFn(void *opaque) { abruptEndCanary_t* test = (abruptEndCanary_t*) opaque; UTIL_sleepMilli(10); ZSTD_pthread_mutex_lock(&test->mut);