]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Simplify logic in INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
authorNathan Moinvaziri <nathan@nathanm.com>
Tue, 20 Jan 2026 00:45:53 +0000 (16:45 -0800)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Thu, 5 Feb 2026 20:39:03 +0000 (21:39 +0100)
inffast_tpl.h

index 8247b833d25ea6b0c6ded6124136fb580c0484c5..6918ec194be971c7e84eb5ada4761ba3578d50f0 100644 (file)
@@ -200,21 +200,16 @@ void Z_INTERNAL INFLATE_FAST(PREFIX3(stream) *strm, uint32_t start) {
                             SET_BAD("invalid distance too far back");
                             break;
                         }
-                        if (len <= op - whave) {
-                            do {
-                                *out++ = 0;
-                            } while (--len);
+                        unsigned gap = op - whave;
+                        unsigned zeros = MIN(len, gap);
+                        memset(out, 0, zeros);  /* fill missing bytes with zeros */
+                        out += zeros;
+                        len -= zeros;
+                        if (len == 0)
                             continue;
-                        }
-                        len -= op - whave;
-                        do {
-                            *out++ = 0;
-                        } while (--op > whave);
-                        if (op == 0) {
-                            from = out - dist;
-                            do {
-                                *out++ = *from++;
-                            } while (--len);
+                        op = whave;
+                        if (op == 0) {          /* copy from already-decoded output */
+                            out = chunkcopy_safe(out, out - dist, len, safe);
                             continue;
                         }
 #else