aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/bindings.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-07-07 20:12:39 -0700
committerGravatar GitHub <noreply@github.com> 2023-07-07 20:12:39 -0700
commit67ee498861caae104c90faccb04e73e65a1a3d95 (patch)
treea37af27fc51970698725b07120c626468a8aa58b /src/bun.js/bindings/bindings.zig
parent42eacaf3a9344355adb448fb83e9127c2c87e00d (diff)
downloadbun-67ee498861caae104c90faccb04e73e65a1a3d95.tar.gz
bun-67ee498861caae104c90faccb04e73e65a1a3d95.tar.zst
bun-67ee498861caae104c90faccb04e73e65a1a3d95.zip
Fix potential coercion issue (#3558)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'src/bun.js/bindings/bindings.zig')
-rw-r--r--src/bun.js/bindings/bindings.zig9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/bun.js/bindings/bindings.zig b/src/bun.js/bindings/bindings.zig
index c8d0515e9..7e3fa6d8e 100644
--- a/src/bun.js/bindings/bindings.zig
+++ b/src/bun.js/bindings/bindings.zig
@@ -4597,13 +4597,20 @@ pub const JSValue = enum(JSValueReprInt) {
return FFI.JSVALUE_TO_BOOL(.{ .asJSValue = this });
}
+ pub inline fn asInt52(this: JSValue) i64 {
+ if (comptime bun.Environment.allow_assert) {
+ std.debug.assert(this.isNumber());
+ }
+ return @intFromFloat(i64, @max(@min(this.asDouble(), std.math.maxInt(i52)), std.math.minInt(i52)));
+ }
+
pub fn toInt32(this: JSValue) i32 {
if (this.isInt32()) {
return asInt32(this);
}
if (this.isNumber()) {
- return @truncate(i32, @intFromFloat(i64, asDouble(this)));
+ return @truncate(i32, this.asInt52());
}
if (comptime bun.Environment.allow_assert) {