From 41d5aa1b365516c5f1bad63bfa3bdd7ad0ba6842 Mon Sep 17 00:00:00 2001 From: dweiller <4678790+dweiller@users.noreply.github.com> Date: Sat, 30 Dec 2023 18:17:26 +1100 Subject: [PATCH] prevent by-length slice compile error in static json parsing --- lib/std/json/static.zig | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/std/json/static.zig b/lib/std/json/static.zig index ea0bb6c0f2..d4ae6053f4 100644 --- a/lib/std/json/static.zig +++ b/lib/std/json/static.zig @@ -402,21 +402,33 @@ pub fn innerParse( }, .partial_string_escaped_1 => |arr| { if (i + arr.len > r.len) return error.LengthMismatch; + // tell the compiler that the by-length slice below is valid; + // this assert is required for the inequality to be comptime-known + if (arr.len > r.len) unreachable; @memcpy(r[i..][0..arr.len], arr[0..]); i += arr.len; }, .partial_string_escaped_2 => |arr| { if (i + arr.len > r.len) return error.LengthMismatch; + // tell the compiler that the by-length slice below is valid; + // this assert is required for the inequality to be comptime-known + if (arr.len > r.len) unreachable; @memcpy(r[i..][0..arr.len], arr[0..]); i += arr.len; }, .partial_string_escaped_3 => |arr| { if (i + arr.len > r.len) return error.LengthMismatch; + // tell the compiler that the by-length slice below is valid; + // this assert is required for the inequality to be comptime-known + if (arr.len > r.len) unreachable; @memcpy(r[i..][0..arr.len], arr[0..]); i += arr.len; }, .partial_string_escaped_4 => |arr| { if (i + arr.len > r.len) return error.LengthMismatch; + // tell the compiler that the by-length slice below is valid; + // this assert is required for the inequality to be comptime-known + if (arr.len > r.len) unreachable; @memcpy(r[i..][0..arr.len], arr[0..]); i += arr.len; },