]> git.kaiwu.me - quickjs.git/commitdiff
fixed buffer overflow in BJSON String and BigInt reader (#399)
authorFabrice Bellard <fabrice@bellard.org>
Mon, 7 Apr 2025 16:40:49 +0000 (18:40 +0200)
committerFabrice Bellard <fabrice@bellard.org>
Mon, 7 Apr 2025 16:40:49 +0000 (18:40 +0200)
quickjs.c

index 9be262e502463c53627660e3a84b14d3a92b2d41..b2470ba64e20683a8f06a32c46c96cdb5af560e1 100644 (file)
--- a/quickjs.c
+++ b/quickjs.c
@@ -35564,6 +35564,10 @@ static JSString *JS_ReadString(BCReaderState *s)
         return NULL;
     is_wide_char = len & 1;
     len >>= 1;
+    if (len > JS_STRING_LEN_MAX) {
+        JS_ThrowInternalError(s->ctx, "string too long");
+        return NULL;
+    }
     p = js_alloc_string(s->ctx, len, is_wide_char);
     if (!p) {
         s->error_state = -1;
@@ -35675,8 +35679,7 @@ static JSValue JS_ReadBigInt(BCReaderState *s)
         bc_read_trace(s, "}\n");
         return __JS_NewShortBigInt(s->ctx, 0);
     }
-    p = js_bigint_new(s->ctx,
-                      (len + (JS_LIMB_BITS / 8) - 1) / (JS_LIMB_BITS / 8));
+    p = js_bigint_new(s->ctx, (len - 1) / (JS_LIMB_BITS / 8) + 1);
     if (!p)
         goto fail;
     for(i = 0; i < len / (JS_LIMB_BITS / 8); i++) {