Skip to content

Commit 4bca828

Browse files
authored
[mono] Prevent memory corruption when decoding UCO entry point (#86266)
Fixes: #86264
1 parent 61c34ac commit 4bca828

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

src/mono/mono/mini/aot-compiler.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5352,10 +5352,16 @@ MONO_RESTORE_WARNING
53525352
for (j = 0; j < decoded_args->named_args_num; ++j) {
53535353
if (decoded_args->named_args_info [j].field && !strcmp (decoded_args->named_args_info [j].field->name, "EntryPoint")) {
53545354
named = (const char *)decoded_args->named_args[j]->value.primitive;
5355-
slen = mono_metadata_decode_value (named, &named) + (int)strlen(acfg->user_symbol_prefix);
5356-
export_name = (char *)g_malloc (slen + 1);
5357-
sprintf (export_name, "%s%s", acfg->user_symbol_prefix, named);
5358-
export_name [slen] = 0;
5355+
slen = mono_metadata_decode_value (named, &named);
5356+
5357+
int prefix_len = (int)strlen (acfg->user_symbol_prefix);
5358+
g_assert (prefix_len < 2);
5359+
5360+
export_name = (char *)g_malloc (prefix_len + slen + 1);
5361+
if (prefix_len == 1)
5362+
export_name[0] = *acfg->user_symbol_prefix;
5363+
memcpy (export_name + prefix_len, named, slen);
5364+
export_name [prefix_len + slen] = '\0';
53595365

53605366
g_ptr_array_add (acfg->exported_methods, method);
53615367
}

0 commit comments

Comments
 (0)