47
quickjs/external/quickjs-rs/libquickjs-sys/embed/patches/js-tobigint64-overflow.patch
vendored
Normal file
47
quickjs/external/quickjs-rs/libquickjs-sys/embed/patches/js-tobigint64-overflow.patch
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
diff --git libquickjs-sys/embed/quickjs/libbf.c libquickjs-sys/embed/quickjs/libbf.c
|
||||
index cbabf95..f0625f9 100644
|
||||
--- libquickjs-sys/embed/quickjs/libbf.c
|
||||
+++ libquickjs-sys/embed/quickjs/libbf.c
|
||||
@@ -2261,14 +2261,17 @@ int bf_get_int64(int64_t *pres, const bf_t *a, int flags)
|
||||
v = INT64_MAX;
|
||||
}
|
||||
} else {
|
||||
+ ret = BF_ST_OVERFLOW;
|
||||
slimb_t bit_pos = a->len * LIMB_BITS - a->expn;
|
||||
v = get_bits(a->tab, a->len, bit_pos);
|
||||
#if LIMB_BITS == 32
|
||||
v |= (uint64_t)get_bits(a->tab, a->len, bit_pos + 32) << 32;
|
||||
#endif
|
||||
- if (a->sign)
|
||||
+ if (a->sign) {
|
||||
+ if (a->expn == 64 && v == (uint64_t)INT64_MAX + 1)
|
||||
+ ret = 0; // not overflow, but INT64_MIN
|
||||
v = -v;
|
||||
- ret = 0;
|
||||
+ }
|
||||
}
|
||||
*pres = v;
|
||||
return ret;
|
||||
diff --git libquickjs-sys/embed/quickjs/quickjs.c libquickjs-sys/embed/quickjs/quickjs.c
|
||||
index 7bb20cb..ad5811c 100644
|
||||
--- libquickjs-sys/embed/quickjs/quickjs.c
|
||||
+++ libquickjs-sys/embed/quickjs/quickjs.c
|
||||
@@ -11244,15 +11244,16 @@ static void JS_FreeBigInt(JSContext *ctx, bf_t *a, bf_t *buf)
|
||||
static int JS_ToBigInt64Free(JSContext *ctx, int64_t *pres, JSValue val)
|
||||
{
|
||||
bf_t a_s, *a;
|
||||
+ int ret;
|
||||
|
||||
a = JS_ToBigIntFree(ctx, &a_s, val);
|
||||
if (!a) {
|
||||
*pres = 0;
|
||||
return -1;
|
||||
}
|
||||
- bf_get_int64(pres, a, BF_GET_INT_MOD);
|
||||
+ ret = bf_get_int64(pres, a, BF_GET_INT_MOD);
|
||||
JS_FreeBigInt(ctx, a, &a_s);
|
||||
- return 0;
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
int JS_ToBigInt64(JSContext *ctx, int64_t *pres, JSValueConst val)
|
||||
15
quickjs/external/quickjs-rs/libquickjs-sys/embed/patches/stack-overflow-signed.patch
vendored
Normal file
15
quickjs/external/quickjs-rs/libquickjs-sys/embed/patches/stack-overflow-signed.patch
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
diff -urN quickjs-2019-07-28/quickjs.c quickjs-2019-07-28-stack-overflow-signed/quickjs.c
|
||||
--- quickjs-2019-07-28/quickjs.c 2019-07-28 15:03:03.000000000 +0000
|
||||
+++ quickjs-2019-07-28-stack-overflow-signed/quickjs.c 2019-08-09 20:00:03.666846091 +0000
|
||||
@@ -1732,9 +1732,9 @@
|
||||
|
||||
static inline BOOL js_check_stack_overflow(JSContext *rt, size_t alloca_size)
|
||||
{
|
||||
- size_t size;
|
||||
+ ptrdiff_t size;
|
||||
size = rt->stack_top - js_get_stack_pointer();
|
||||
- return unlikely((size + alloca_size) > rt->stack_size);
|
||||
+ return unlikely((size + (ptrdiff_t)alloca_size) > (ptrdiff_t)rt->stack_size);
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user