]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
fuzzer error fix
authorDanielle Rozenblit <drozenblit@fb.com>
Mon, 12 Sep 2022 18:53:37 +0000 (11:53 -0700)
committerDanielle Rozenblit <drozenblit@fb.com>
Mon, 12 Sep 2022 18:53:37 +0000 (11:53 -0700)
lib/decompress/zstd_decompress.c

index a257f5f651f8343823f41db87245b5652020f8ee..ffc3ed9b194e700e3c5f4324b004c21f3e2f2c9b 100644 (file)
@@ -2177,24 +2177,24 @@ size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inB
                 break;
             }
         case zdss_flush:
-            if (op != NULL) {
-                size_t const toFlushSize = zds->outEnd - zds->outStart;
-                size_t const flushedSize = ZSTD_limitCopy(op, (size_t)(oend-op), zds->outBuff + zds->outStart, toFlushSize);
+            {
+            size_t const toFlushSize = zds->outEnd - zds->outStart;
+            size_t const flushedSize = ZSTD_limitCopy(op, (size_t)(oend-op), zds->outBuff + zds->outStart, toFlushSize);
 
-                op += flushedSize;
+            op = op ? op + flushedSize : op;
 
-                zds->outStart += flushedSize;
-                if (flushedSize == toFlushSize) {  /* flush completed */
-                    zds->streamStage = zdss_read;
-                    if ( (zds->outBuffSize < zds->fParams.frameContentSize)
+            zds->outStart += flushedSize;
+            if (flushedSize == toFlushSize) {  /* flush completed */
+                zds->streamStage = zdss_read;
+                if ( (zds->outBuffSize < zds->fParams.frameContentSize)
                     && (zds->outStart + zds->fParams.blockSizeMax > zds->outBuffSize) ) {
-                        DEBUGLOG(5, "restart filling outBuff from beginning (left:%i, needed:%u)",
-                                (int)(zds->outBuffSize - zds->outStart),
-                                (U32)zds->fParams.blockSizeMax);
-                        zds->outStart = zds->outEnd = 0;
-                    }
-                    break;
-            }   }
+                    DEBUGLOG(5, "restart filling outBuff from beginning (left:%i, needed:%u)",
+                            (int)(zds->outBuffSize - zds->outStart),
+                            (U32)zds->fParams.blockSizeMax);
+                    zds->outStart = zds->outEnd = 0;
+                }
+                break;
+            } }
             /* cannot complete flush */
             someMoreWork = 0;
             break;