]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Fix ZSTD_execSequence() edge case 416/head
authorNick Terrell <terrelln@fb.com>
Mon, 10 Oct 2016 23:19:21 +0000 (16:19 -0700)
committerNick Terrell <terrelln@fb.com>
Wed, 12 Oct 2016 17:05:26 +0000 (10:05 -0700)
lib/decompress/zstd_decompress.c
lib/legacy/zstd_v04.c
lib/legacy/zstd_v05.c
lib/legacy/zstd_v06.c
lib/legacy/zstd_v07.c

index 47b5f42c7814bd7f3010f87959ffa265d3903c05..88869d82a0092b6e50f838a12b6e6b85c2d0acb1 100644 (file)
@@ -878,7 +878,12 @@ size_t ZSTD_execSequence(BYTE* op,
             op = oLitEnd + length1;
             sequence.matchLength -= length1;
             match = base;
+            if (op > oend_w) {
+              memmove(op, match, sequence.matchLength);
+              return sequenceLength;
+            }
     }   }
+    /* Requirement: op <= oend_w */
 
     /* match within prefix */
     if (sequence.offset < 8) {
index c9dcb94e039d93da3849a72ee252c58a3fc04bc1..05e40aac51aea7a2a40cae74b7ec7d1ee4bcb7c5 100644 (file)
@@ -3107,8 +3107,13 @@ static size_t ZSTD_execSequence(BYTE* op,
             op = oLitEnd + length1;
             sequence.matchLength -= length1;
             match = base;
+            if (op > oend_8) {
+              memmove(op, match, sequence.matchLength);
+              return sequenceLength;
+            }
         }
     }
+    /* Requirement: op <= oend_8 */
 
     /* match within prefix */
     if (sequence.offset < 8)
index 5027e2b8ba9aa029df9bd0525ae88886a7d654fc..96ffceb97149317ec8ae79ae8eb070baa640fea5 100644 (file)
@@ -3312,7 +3312,12 @@ static size_t ZSTDv05_execSequence(BYTE* op,
             op = oLitEnd + length1;
             sequence.matchLength -= length1;
             match = base;
+            if (op > oend_8) {
+              memmove(op, match, sequence.matchLength);
+              return sequenceLength;
+            }
     }   }
+    /* Requirement: op <= oend_8 */
 
     /* match within prefix */
     if (sequence.offset < 8) {
index d9e89f806fd541f70f6c9a237b3e274027a77081..96a84d3e82851bc22e3e37521cf2d17db843b618 100644 (file)
@@ -3466,7 +3466,12 @@ size_t ZSTDv06_execSequence(BYTE* op,
             op = oLitEnd + length1;
             sequence.matchLength -= length1;
             match = base;
+            if (op > oend_8) {
+              memmove(op, match, sequence.matchLength);
+              return sequenceLength;
+            }
     }   }
+    /* Requirement: op <= oend_8 */
 
     /* match within prefix */
     if (sequence.offset < 8) {
index f4c8073f9bbea5a69b1b2a9c34bf1cb97219bd88..62285238aa637c7d67e75bbb2ffb75bec147d534 100644 (file)
@@ -3690,7 +3690,12 @@ size_t ZSTDv07_execSequence(BYTE* op,
             op = oLitEnd + length1;
             sequence.matchLength -= length1;
             match = base;
+            if (op > oend_w) {
+              memmove(op, match, sequence.matchLength);
+              return sequenceLength;
+            }
     }   }
+    /* Requirement: op <= oend_w */
 
     /* match within prefix */
     if (sequence.offset < 8) {