From: Ryan Lucia Date: Fri, 4 Oct 2019 17:41:56 +0000 (-0400) Subject: [reflection] Only duplicate MonoMarshalSpec strings for custom types (mono/mono#17175) X-Git-Tag: submit/tizen/20210909.063632~10331^2~5^2~414 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e80cf0e8f9207279231e69c5bc49c938287b792f;p=platform%2Fupstream%2Fdotnet%2Fruntime.git [reflection] Only duplicate MonoMarshalSpec strings for custom types (mono/mono#17175) * [reflection] only duplicate MonoMarshalSpec strings for custom types * Add test Commit migrated from https://github.com/mono/mono/commit/05217395db99f0d02a6737ed0491fa65db96632d --- diff --git a/src/mono/mono/metadata/loader.c b/src/mono/mono/metadata/loader.c index 095cb36..baf7241 100644 --- a/src/mono/mono/metadata/loader.c +++ b/src/mono/mono/metadata/loader.c @@ -2372,13 +2372,16 @@ mono_method_get_marshal_info (MonoMethod *method, MonoMarshalSpec **mspecs) ((MonoDynamicImage*)m_class_get_image (method->klass))->method_aux_hash, method); if (method_aux && method_aux->param_marshall) { MonoMarshalSpec **dyn_specs = method_aux->param_marshall; - for (i = 0; i < signature->param_count + 1; ++i) + for (i = 0; i < signature->param_count + 1; ++i) { if (dyn_specs [i]) { mspecs [i] = g_new0 (MonoMarshalSpec, 1); memcpy (mspecs [i], dyn_specs [i], sizeof (MonoMarshalSpec)); - mspecs [i]->data.custom_data.custom_name = g_strdup (dyn_specs [i]->data.custom_data.custom_name); - mspecs [i]->data.custom_data.cookie = g_strdup (dyn_specs [i]->data.custom_data.cookie); + if (mspecs [i]->native == MONO_NATIVE_CUSTOM) { + mspecs [i]->data.custom_data.custom_name = g_strdup (dyn_specs [i]->data.custom_data.custom_name); + mspecs [i]->data.custom_data.cookie = g_strdup (dyn_specs [i]->data.custom_data.cookie); + } } + } } return; } diff --git a/src/mono/mono/metadata/sre.c b/src/mono/mono/metadata/sre.c index 7e71876..2ecc3e8 100644 --- a/src/mono/mono/metadata/sre.c +++ b/src/mono/mono/metadata/sre.c @@ -2168,7 +2168,7 @@ handle_enum: simple_type = mono_class_enum_basetype_internal (type->data.klass)->type; goto handle_enum; } else { - g_warning ("generic valutype %s not handled in custom attr value decoding", type->data.klass->name); + g_warning ("generic valuetype %s not handled in custom attr value decoding", type->data.klass->name); } break; case MONO_TYPE_STRING: {