Escape type namespaces, document that we aren't escaping names for now
authorRyan Lucia <rylucia@microsoft.com>
Tue, 17 Sep 2019 23:47:29 +0000 (19:47 -0400)
committerLarry Ewing <lewing@microsoft.com>
Mon, 7 Oct 2019 14:43:47 +0000 (09:43 -0500)
Commit migrated from https://github.com/mono/mono/commit/d12db16723f648b11ce1b0cd306a3c82ce4f89cd

src/mono/mono/metadata/icall.c

index 6850e49..d26214e 100644 (file)
@@ -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