mirror of
https://github.com/odin-lang/Odin.git
synced 2025-12-31 02:12:04 +00:00
Fix invalid union access
UBSan spotted that |src->Basic.kind| had a value outside the range of |BasicKind| due to it actually being a |Type_Pointer|. Since these are stored in a union there could be cases where the value of |kind| just so happens to be |Basic_string|, in which case the branch would have been taken when it shouldn't have been. To fix this simply check that it's a |Type_Basic| before treating it as a |Basic|.
This commit is contained in:
@@ -1647,7 +1647,7 @@ gb_internal lbValue lb_emit_conv(lbProcedure *p, lbValue value, Type *t) {
|
||||
lb_emit_store(p, a1, id);
|
||||
return lb_addr_load(p, res);
|
||||
} else if (dst->kind == Type_Basic) {
|
||||
if (src->Basic.kind == Basic_string && dst->Basic.kind == Basic_cstring) {
|
||||
if (src->kind == Type_Basic && src->Basic.kind == Basic_string && dst->Basic.kind == Basic_cstring) {
|
||||
String str = lb_get_const_string(m, value);
|
||||
lbValue res = {};
|
||||
res.type = t;
|
||||
|
||||
Reference in New Issue
Block a user