From c43e06672cd9dacf2122c99f362120a17c34b391 Mon Sep 17 00:00:00 2001 From: Calvin Rose Date: Fri, 23 Jan 2026 08:01:22 -0600 Subject: [PATCH] Address #1700 and move test cases to suite-compile.janet --- src/core/specials.c | 6 ++++-- test/suite-compile.janet | 27 +++++++++++++++++++++++++++ test/suite-corelib.janet | 17 ----------------- 3 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/core/specials.c b/src/core/specials.c index 446f5de1..0b915d78 100644 --- a/src/core/specials.c +++ b/src/core/specials.c @@ -686,8 +686,10 @@ static JanetSlot janetc_if(JanetFopts opts, int32_t argn, const Janet *argv) { /* Write jumps - only add jump lengths if jump actually emitted */ labeld = janet_v_count(c->buffer); - c->buffer[labeljr] |= (labelr - labeljr) << 16; - if (!tail) c->buffer[labeljd] |= (labeld - labeljd) << 8; + if (labeljr < labeld) { + c->buffer[labeljr] |= (labelr - labeljr) << 16; + if (!tail) c->buffer[labeljd] |= (labeld - labeljd) << 8; + } if (tail) target.flags |= JANET_SLOT_RETURNED; return target; diff --git a/test/suite-compile.janet b/test/suite-compile.janet index b3c280b0..d4e0dc67 100644 --- a/test/suite-compile.janet +++ b/test/suite-compile.janet @@ -75,5 +75,32 @@ (foo 0) 10) +# Issue #1699 - fuzz case with bad def +(def result + (compile '(defn sum3 + "Solve the 3SUM problem in O(n^2) time." + [s] + (def)tab @{}))) +(assert (get result :error) "bad sum3 fuzz issue valgrind") + +# Issue #1700 +(def result + (compile + '(defn fuzz-case-1 + [start end &] + (if end + (if e start (lazy-range (+ 1 start) end))) + 1))) +(assert (get result :error) "fuzz case issue #1700") + +# Issue #1702 - fuzz case with upvalues +(def result + (compile + '(each item [1 2 3] + # Generate a lot of upvalues (more than 224) + (def ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;out-buf @"") + (with-dyns [:out out-buf] 1)))) +(assert result "bad upvalues fuzz case") + (end-suite) diff --git a/test/suite-corelib.janet b/test/suite-corelib.janet index 9114a4cc..99ee7eeb 100644 --- a/test/suite-corelib.janet +++ b/test/suite-corelib.janet @@ -202,21 +202,4 @@ (assert-no-error "def destructure splice works 2" (do (def (n) [(splice [])]) n)) (assert-no-error "var destructure splice works" (do (var [a] [;[1]]) a)) -# Issue #1702 - fuzz case with upvalues -(def result - (compile - '(each item [1 2 3] - # Generate a lot of upvalues (more than 224) - (def ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;out-buf @"") - (with-dyns [:out out-buf] 1)))) -(assert result "bad upvalues fuzz case") - -# Issue #1699 - fuzz case with bad def -(def result - (compile '(defn sum3 - "Solve the 3SUM problem in O(n^2) time." - [s] - (def)tab @{}))) -(assert (get result :error) "bad sum3 fuzz issue valgrind") - (end-suite)