]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Assert We Allocated Approximately What We Expected To
authorW. Felix Handte <w@felixhandte.com>
Tue, 12 May 2020 20:52:22 +0000 (16:52 -0400)
committerW. Felix Handte <w@felixhandte.com>
Tue, 12 May 2020 20:55:03 +0000 (16:55 -0400)
lib/compress/zstd_compress.c
lib/compress/zstd_cwksp.h

index 6993d8ccef35c0c04531aca9740cdbdf95ffe149..bf9901dcd6f4c78fc2f0ed5e54805ef9384d21d6 100644 (file)
@@ -1578,6 +1578,12 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
             ZSTD_window_clear(&zc->ldmState.window);
         }
 
+        /* Due to alignment, when reusing a workspace, we can actually consume
+         * up to 3 extra bytes for alignment. See the comments in zstd_cwksp.h
+         */
+        assert(ZSTD_cwksp_used(ws) >= neededSpace &&
+               ZSTD_cwksp_used(ws) <= neededSpace + 3);
+
         DEBUGLOG(3, "wksp: finished allocating, %zd bytes remain available", ZSTD_cwksp_available_space(ws));
         zc->initialized = 1;
 
index a25c9263b7d7b2805b45ec59268c87fdef979580..eaf663086c44ea16e2476031ab7b09b78adb3934 100644 (file)
@@ -483,6 +483,11 @@ MEM_STATIC size_t ZSTD_cwksp_sizeof(const ZSTD_cwksp* ws) {
     return (size_t)((BYTE*)ws->workspaceEnd - (BYTE*)ws->workspace);
 }
 
+MEM_STATIC size_t ZSTD_cwksp_used(const ZSTD_cwksp* ws) {
+    return (size_t)((BYTE*)ws->tableEnd - (BYTE*)ws->workspace)
+         + (size_t)((BYTE*)ws->workspaceEnd - (BYTE*)ws->allocStart);
+}
+
 MEM_STATIC int ZSTD_cwksp_reserve_failed(const ZSTD_cwksp* ws) {
     return ws->allocFailed;
 }