authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2023-01-22 13:29:05+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2023-01-29 23:16:45+02:00
log92dfc07489c3f8514792434e2857b419ebf1f208
treedd3ba22b9c70247076db1f964095d29f1374b184
parent23b7d28896609e3f01765730599119baf53a56c9

TypedValue: fix crash when string-like aggregate has undefined element

Closes #6334

1 files changed, 4 insertions(+), 1 deletions(-)

src/TypedValue.zig+4-1
...@@ -176,7 +176,9 @@ pub fn print(...@@ -176,7 +176,9 @@ pub fn print(
176176
177 var i: u32 = 0;177 var i: u32 = 0;
178 while (i < max_len) : (i += 1) {178 while (i < max_len) : (i += 1) {
179 buf[i] = std.math.cast(u8, val.fieldValue(ty, i).toUnsignedInt(target)) orelse break :str;179 const elem = val.fieldValue(ty, i);
180 if (elem.isUndef()) break :str;
181 buf[i] = std.math.cast(u8, elem.toUnsignedInt(target)) orelse break :str;
180 }182 }
181183
182 const truncated = if (len > max_string_len) " (truncated)" else "";184 const truncated = if (len > max_string_len) " (truncated)" else "";
...@@ -390,6 +392,7 @@ pub fn print(...@@ -390,6 +392,7 @@ pub fn print(
390 while (i < max_len) : (i += 1) {392 while (i < max_len) : (i += 1) {
391 var elem_buf: Value.ElemValueBuffer = undefined;393 var elem_buf: Value.ElemValueBuffer = undefined;
392 const elem_val = payload.ptr.elemValueBuffer(mod, i, &elem_buf);394 const elem_val = payload.ptr.elemValueBuffer(mod, i, &elem_buf);
395 if (elem_val.isUndef()) break :str;
393 buf[i] = std.math.cast(u8, elem_val.toUnsignedInt(target)) orelse break :str;396 buf[i] = std.math.cast(u8, elem_val.toUnsignedInt(target)) orelse break :str;
394 }397 }
395398