From d12db16723f648b11ce1b0cd306a3c82ce4f89cd Mon Sep 17 00:00:00 2001 From: Ryan Lucia Date: Tue, 17 Sep 2019 19:47:29 -0400 Subject: [PATCH] Escape type namespaces, document that we aren't escaping names for now --- mono/metadata/icall.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/mono/metadata/icall.c b/mono/metadata/icall.c index 6850e49405d2f..d26214e4cc94f 100644 --- a/mono/metadata/icall.c +++ b/mono/metadata/icall.c @@ -3099,16 +3099,19 @@ ves_icall_RuntimeType_get_Name (MonoReflectionTypeHandle reftype, MonoError *err MonoDomain *domain = mono_domain_get (); MonoType *type = MONO_HANDLE_RAW(reftype)->type; MonoClass *klass = mono_class_from_mono_type_internal (type); + // FIXME: this should be escaped in some scenarios with mono_identifier_escape_type_name_chars + // Determining exactly when to do so is fairly difficult, so for now we don't bother to avoid regressions + const char *klass_name = m_class_get_name (klass); if (type->byref) { - char *n = g_strdup_printf ("%s&", m_class_get_name (klass)); + char *n = g_strdup_printf ("%s&", klass_name); MonoStringHandle res = mono_string_new_handle (domain, n, error); g_free (n); return res; } else { - return mono_string_new_handle (domain, m_class_get_name (klass), error); + return mono_string_new_handle (domain, klass_name, error); } } @@ -3124,8 +3127,11 @@ ves_icall_RuntimeType_get_Namespace (MonoReflectionTypeHandle type, MonoError *e if (m_class_get_name_space (klass) [0] == '\0') return NULL_HANDLE_STRING; - else - return mono_string_new_handle (domain, m_class_get_name_space (klass), error); + + char *escaped = mono_identifier_escape_type_name_chars (m_class_get_name_space (klass)); + MonoStringHandle res = mono_string_new_handle (domain, escaped, error); + g_free (escaped); + return res; } gint32