From 06d581dde3595f372ef2ac94fcbcc1bc34bd1bae Mon Sep 17 00:00:00 2001 From: Calvin Rose Date: Mon, 20 Jan 2025 09:02:22 -0600 Subject: [PATCH] Fix #1546 - large ranges. Raise an error for very large ranges instead of internal assert. --- src/core/corelib.c | 3 ++- test/suite-corelib.janet | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/core/corelib.c b/src/core/corelib.c index 01775d19..e6715962 100644 --- a/src/core/corelib.c +++ b/src/core/corelib.c @@ -449,8 +449,9 @@ JANET_CORE_FN(janet_core_range, } count = (count > 0) ? count : 0; int32_t int_count; + janet_assert(count >= 0, "bad range code"); if (count > (double) INT32_MAX) { - int_count = INT32_MAX; + janet_panicf("range is too large, %f elements", count); } else { int_count = (int32_t) ceil(count); } diff --git a/test/suite-corelib.janet b/test/suite-corelib.janet index 3c209418..119ec768 100644 --- a/test/suite-corelib.janet +++ b/test/suite-corelib.janet @@ -174,6 +174,7 @@ (assert (deep= (range 0 17 4) @[0 4 8 12 16]) "(range 0 17 4)") (assert (deep= (range 16 0 -4) @[16 12 8 4]) "(range 16 0 -4)") (assert (deep= (range 17 0 -4) @[17 13 9 5 1]) "(range 17 0 -4)") +(assert-error "large range" (range 0xFFFFFFFFFF)) (assert (= (length (range 10)) 10) "(range 10)") (assert (= (length (range -10)) 0) "(range -10)")