]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
fixed warnings in testpools
authorYann Collet <cyan@fb.com>
Wed, 24 Oct 2018 17:36:06 +0000 (10:36 -0700)
committerYann Collet <cyan@fb.com>
Wed, 24 Oct 2018 17:36:06 +0000 (10:36 -0700)
lib/decompress/zstd_decompress.c
tests/poolTests.c

index fffcc34dd3cba4f7f48c8684edc3d4c85e8a9235..54b9bf70d4df4e680b26f8210eac24f758edc892 100644 (file)
@@ -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 */
index 9661b5299e5230e62871c9a6c2938d21b849a355..8b9a4700229d78e38646a1bbb40d738933f9df8e 100644 (file)
@@ -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);