From c8ec7c1294db52edb0b2feb8a32ba0ff8ff03146 Mon Sep 17 00:00:00 2001 From: Raiden1411 <67233402+Raiden1411@users.noreply.github.com> Date: Thu, 21 Aug 2025 10:38:08 +0100 Subject: [PATCH] std: remove lossy int to float coercion on json parse --- lib/std/json/static.zig | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/std/json/static.zig b/lib/std/json/static.zig index 540f5338f9..ced6894027 100644 --- a/lib/std/json/static.zig +++ b/lib/std/json/static.zig @@ -567,8 +567,8 @@ pub fn innerParseFromValue( switch (source) { .float => |f| { if (@round(f) != f) return error.InvalidNumber; - if (f > std.math.maxInt(T)) return error.Overflow; - if (f < std.math.minInt(T)) return error.Overflow; + if (f > @as(@TypeOf(f), @floatFromInt(std.math.maxInt(T)))) return error.Overflow; + if (f < @as(@TypeOf(f), @floatFromInt(std.math.minInt(T)))) return error.Overflow; return @as(T, @intFromFloat(f)); }, .integer => |i| { @@ -770,7 +770,7 @@ fn sliceToInt(comptime T: type, slice: []const u8) !T { // Try to coerce a float to an integer. const float = try std.fmt.parseFloat(f128, slice); if (@round(float) != float) return error.InvalidNumber; - if (float > std.math.maxInt(T) or float < std.math.minInt(T)) return error.Overflow; + if (float > @as(f128, @floatFromInt(std.math.maxInt(T))) or float < @as(f128, @floatFromInt(std.math.minInt(T)))) return error.Overflow; return @as(T, @intCast(@as(i128, @intFromFloat(float)))); }