From 3f34add49704b4f476d6d354d85f44daf77d06c7 Mon Sep 17 00:00:00 2001 From: Ajay Bhargav Baaskaran Date: Tue, 22 Sep 2015 15:19:10 -0700 Subject: [PATCH] Removed support for regex type names in @addTagHelper and @removeTagHelper - #426 - Updated tests to not use regex patterns --- .../TagHelpers/TagHelperDescriptorResolver.cs | 24 +- .../TagHelperDescriptorResolverTest.cs | 209 ++---------------- 2 files changed, 37 insertions(+), 196 deletions(-) diff --git a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs index 4a48651e89..11d30e3667 100644 --- a/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs +++ b/src/Microsoft.AspNet.Razor.Runtime/TagHelpers/TagHelperDescriptorResolver.cs @@ -236,16 +236,20 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers return false; } - // We need to escape the TypePattern so we can choose to only allow specific regex. - var escaped = Regex.Escape(lookupInfo.TypePattern); + if (lookupInfo.TypePattern.EndsWith("*", StringComparison.Ordinal)) + { + if (lookupInfo.TypePattern.Length == 1) + { + // TypePattern is "*". + return true; + } - // We surround the escaped with ^ and $ in order ot ensure a regex match matches the entire - // string. We also replace any '*' or '?' characters with regex to match appropriate content. - // '*' matches 0 or more characters lazily and '?' matches 1 character. - var pattern = "^" + escaped.Replace(@"\?", ".").Replace(@"\*", ".*?") + "$"; - var regex = new Regex(pattern, RegexOptions.Singleline, Constants.RegexMatchTimeout); + var lookupTypeName = lookupInfo.TypePattern.Substring(0, lookupInfo.TypePattern.Length - 1); - return regex.IsMatch(descriptor.TypeName); + return descriptor.TypeName.StartsWith(lookupTypeName, StringComparison.Ordinal); + } + + return string.Equals(descriptor.TypeName, lookupInfo.TypePattern, StringComparison.Ordinal); } private static LookupInfo GetLookupInfo( @@ -255,9 +259,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers var lookupText = directiveDescriptor.DirectiveText; var lookupStrings = lookupText?.Split(new[] { ',' }); - // Ensure that we have valid lookupStrings to work with. Valid formats are: - // "assemblyName" - // "typeName, assemblyName" + // Ensure that we have valid lookupStrings to work with. The valid format is "typeName, assemblyName" if (lookupStrings == null || lookupStrings.Any(string.IsNullOrWhiteSpace) || lookupStrings.Length != 2) diff --git a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs index 378c8956cd..d5caac40c1 100644 --- a/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs +++ b/test/Microsoft.AspNet.Razor.Runtime.Test/TagHelpers/TagHelperDescriptorResolverTest.cs @@ -149,7 +149,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers }, new TagHelperDirectiveDescriptor { - DirectiveText = "*Plain*, " + assemblyA, + DirectiveText = "Microsoft.AspNet.Razor.Runtime.TagHelpers.Valid_P*, " + assemblyA, Location = directiveLocation1, DirectiveType = TagHelperDirectiveType.AddTagHelper } @@ -181,13 +181,13 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers }, new TagHelperDirectiveDescriptor { - DirectiveText = "*Plain*, " + assemblyA, + DirectiveText = "Microsoft.AspNet.Razor.Runtime.TagHelpers.Valid_Plain*, " + assemblyA, Location = directiveLocation1, DirectiveType = TagHelperDirectiveType.AddTagHelper }, new TagHelperDirectiveDescriptor { - DirectiveText = "*String*, " + assemblyB, + DirectiveText = "System.String, " + assemblyB, Location = directiveLocation1, DirectiveType = TagHelperDirectiveType.AddTagHelper } @@ -451,7 +451,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { CreateTagHelperDirectiveDescriptor("", TagHelperDirectiveType.TagHelperPrefix), CreateTagHelperDirectiveDescriptor( - "*Plain*, " + assemblyA, + "Microsoft.AspNet.Razor.Runtime.TagHelpers.Valid_Plain*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), }, new [] { Valid_PlainTagHelperDescriptor } @@ -462,22 +462,11 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { CreateTagHelperDirectiveDescriptor("th:", TagHelperDirectiveType.TagHelperPrefix), CreateTagHelperDirectiveDescriptor( - "*Plain*, " + assemblyA, + "Microsoft.AspNet.Razor.Runtime.TagHelpers.Valid_Plain*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), }, new [] { CreatePrefixedValidPlainDescriptor("th:") } }, - { - defaultAssemblyLookups, - new [] - { - CreateTagHelperDirectiveDescriptor( - "*Plain*, " + assemblyA, - TagHelperDirectiveType.AddTagHelper), - CreateTagHelperDirectiveDescriptor("th:", TagHelperDirectiveType.TagHelperPrefix) - }, - new [] { CreatePrefixedValidPlainDescriptor("th:") } - }, { defaultAssemblyLookups, new [] @@ -497,10 +486,10 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { CreateTagHelperDirectiveDescriptor("th-", TagHelperDirectiveType.TagHelperPrefix), CreateTagHelperDirectiveDescriptor( - "*Plain*, " + assemblyA, + "Microsoft.AspNet.Razor.Runtime.TagHelpers.Valid_Plain*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), CreateTagHelperDirectiveDescriptor( - "*Inherited*, " + assemblyA, + "Microsoft.AspNet.Razor.Runtime.TagHelpers.Valid_Inherited*, " + assemblyA, TagHelperDirectiveType.AddTagHelper) }, new [] @@ -515,32 +504,14 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { CreateTagHelperDirectiveDescriptor("", TagHelperDirectiveType.TagHelperPrefix), CreateTagHelperDirectiveDescriptor( - "*Plain*, " + assemblyA, + "Microsoft.AspNet.Razor.Runtime.TagHelpers.Valid_Plain*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), CreateTagHelperDirectiveDescriptor( - "*Inherited*, " + assemblyA, + "Microsoft.AspNet.Razor.Runtime.TagHelpers.Valid_Inherited*, " + assemblyA, TagHelperDirectiveType.AddTagHelper) }, new [] { Valid_PlainTagHelperDescriptor, Valid_InheritedTagHelperDescriptor } }, - { - defaultAssemblyLookups, - new [] - { - CreateTagHelperDirectiveDescriptor( - "*Plain*, " + assemblyA, - TagHelperDirectiveType.AddTagHelper), - CreateTagHelperDirectiveDescriptor( - "*Inherited*, " + assemblyA, - TagHelperDirectiveType.AddTagHelper), - CreateTagHelperDirectiveDescriptor("th:", TagHelperDirectiveType.TagHelperPrefix) - }, - new [] - { - CreatePrefixedValidPlainDescriptor("th:"), - CreatePrefixedValidInheritedDescriptor("th:") - } - }, { defaultAssemblyLookups, new [] @@ -770,45 +741,6 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers }, new [] { Valid_PlainTagHelperDescriptor } }, - { - new Dictionary> - { - { assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } }, - }, - new [] - { - CreateTagHelperDirectiveDescriptor( - Valid_PlainTagHelperType.Namespace + ".Valid?Plain*, " + assemblyA, - TagHelperDirectiveType.AddTagHelper), - }, - new [] { Valid_PlainTagHelperDescriptor } - }, - { - new Dictionary> - { - { assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } }, - }, - new [] - { - CreateTagHelperDirectiveDescriptor( - "*Plain*, " + assemblyA, - TagHelperDirectiveType.AddTagHelper), - }, - new [] { Valid_PlainTagHelperDescriptor } - }, - { - new Dictionary> - { - { assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } }, - }, - new [] - { - CreateTagHelperDirectiveDescriptor( - "*Plain?*, " + assemblyA, - TagHelperDirectiveType.AddTagHelper), - }, - new [] { Valid_PlainTagHelperDescriptor } - }, { new Dictionary> { @@ -830,64 +762,11 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers new [] { CreateTagHelperDirectiveDescriptor( - "*_*lain*, " + assemblyA, + Valid_PlainTagHelperType.Namespace + "." + Valid_PlainTagHelperType.Name + ", " + assemblyA, TagHelperDirectiveType.AddTagHelper), }, new [] { Valid_PlainTagHelperDescriptor } }, - { - new Dictionary> - { - { assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } }, - }, - new [] - { - CreateTagHelperDirectiveDescriptor( - "*?*l?in*, " + assemblyA, - TagHelperDirectiveType.AddTagHelper), - }, - new [] { Valid_PlainTagHelperDescriptor } - }, - { - new Dictionary> - { - { assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } }, - }, - new [] - { - CreateTagHelperDirectiveDescriptor( - "*" + Valid_PlainTagHelperType.FullName + "*, " + assemblyA, - TagHelperDirectiveType.AddTagHelper), - }, - new [] { Valid_PlainTagHelperDescriptor } - }, - { - new Dictionary> - { - { assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } }, - }, - new [] - { - CreateTagHelperDirectiveDescriptor( - "*" + Valid_PlainTagHelperType.FullName + "*, " + assemblyA, - TagHelperDirectiveType.AddTagHelper), - }, - new [] { Valid_PlainTagHelperDescriptor } - }, - { - new Dictionary> - { - { assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } } - }, - new [] - { - CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), - CreateTagHelperDirectiveDescriptor( - "*_*la*, " + assemblyA, - TagHelperDirectiveType.RemoveTagHelper) - }, - new [] { Valid_InheritedTagHelperDescriptor } - }, { new Dictionary> { @@ -897,22 +776,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), CreateTagHelperDirectiveDescriptor( - "*Plain*, " + assemblyA, - TagHelperDirectiveType.RemoveTagHelper), - CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper) - }, - new [] { Valid_InheritedTagHelperDescriptor, Valid_PlainTagHelperDescriptor } - }, - { - new Dictionary> - { - { assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } }, - }, - new [] - { - CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), - CreateTagHelperDirectiveDescriptor( - "?*Plain*?, " + assemblyA, + Valid_PlainTagHelperType.Namespace + ".Valid_P*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper), CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper) }, @@ -927,7 +791,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers new [] { CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), - CreateTagHelperDirectiveDescriptor("*ring, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper) + CreateTagHelperDirectiveDescriptor("Str*, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper) }, new [] { Valid_PlainTagHelperDescriptor } }, @@ -939,8 +803,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers }, new [] { - CreateTagHelperDirectiveDescriptor("?*?, " + assemblyA, TagHelperDirectiveType.AddTagHelper), - CreateTagHelperDirectiveDescriptor("*?r?n?, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper) + CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), + CreateTagHelperDirectiveDescriptor("*, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper) }, new [] { Valid_PlainTagHelperDescriptor } }, @@ -952,8 +816,8 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers }, new [] { - CreateTagHelperDirectiveDescriptor("?*TagHelper, " + assemblyA, TagHelperDirectiveType.AddTagHelper), - CreateTagHelperDirectiveDescriptor("?" + stringType.FullName + ", " + assemblyB, TagHelperDirectiveType.AddTagHelper) + CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), + CreateTagHelperDirectiveDescriptor("System." + stringType.FullName + ", " + assemblyB, TagHelperDirectiveType.AddTagHelper) }, new [] { Valid_PlainTagHelperDescriptor } }, @@ -971,20 +835,6 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers }, new [] { stringTagHelperDescriptor } }, - { - new Dictionary> - { - { assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } }, - { assemblyB, new [] { stringType } } - }, - new [] - { - CreateTagHelperDirectiveDescriptor("*????*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), - CreateTagHelperDirectiveDescriptor("*?, " + assemblyB, TagHelperDirectiveType.AddTagHelper), - CreateTagHelperDirectiveDescriptor("Microsoft?*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper) - }, - new [] { stringTagHelperDescriptor } - }, { new Dictionary> { @@ -1000,7 +850,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers CreateTagHelperDirectiveDescriptor( "?Microsoft*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper), CreateTagHelperDirectiveDescriptor( - "?" + stringType.FullName + ", " + assemblyB, TagHelperDirectiveType.RemoveTagHelper) + "System." + stringType.FullName + ", " + assemblyB, TagHelperDirectiveType.RemoveTagHelper) }, new [] { @@ -1022,9 +872,9 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers CreateTagHelperDirectiveDescriptor( "*, " + assemblyB, TagHelperDirectiveType.AddTagHelper), CreateTagHelperDirectiveDescriptor( - "Microsoft*TagHelper?, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper), + "TagHelper*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper), CreateTagHelperDirectiveDescriptor( - stringType.FullName + "?, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper) + "System." + stringType.FullName + ", " + assemblyB, TagHelperDirectiveType.RemoveTagHelper) }, new [] { @@ -1151,18 +1001,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers new [] { CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), - CreateTagHelperDirectiveDescriptor("*TagHelper, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper), - } - }, - { - new Dictionary> - { - { assemblyA, new [] { Valid_PlainTagHelperType } }, - }, - new [] - { - CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), - CreateTagHelperDirectiveDescriptor("*TagHelpe?, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper), + CreateTagHelperDirectiveDescriptor("Mic*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper), } }, { @@ -1172,9 +1011,9 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers }, new [] { - CreateTagHelperDirectiveDescriptor("*_*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), - CreateTagHelperDirectiveDescriptor("*Plain*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper), - CreateTagHelperDirectiveDescriptor("*_*Inhe*ed*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper) + CreateTagHelperDirectiveDescriptor("Mic*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), + CreateTagHelperDirectiveDescriptor(Valid_PlainTagHelperType.FullName + ", " + assemblyA, TagHelperDirectiveType.RemoveTagHelper), + CreateTagHelperDirectiveDescriptor(Valid_InheritedTagHelperType.FullName + ", " + assemblyA, TagHelperDirectiveType.RemoveTagHelper) } }, { @@ -1187,7 +1026,7 @@ namespace Microsoft.AspNet.Razor.Runtime.TagHelpers { CreateTagHelperDirectiveDescriptor("Microsoft.*, " + assemblyA, TagHelperDirectiveType.AddTagHelper), CreateTagHelperDirectiveDescriptor("System.*, " + assemblyB, TagHelperDirectiveType.AddTagHelper), - CreateTagHelperDirectiveDescriptor("*Helper, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper), + CreateTagHelperDirectiveDescriptor(Valid_PlainTagHelperType.Namespace + "*, " + assemblyA, TagHelperDirectiveType.RemoveTagHelper), CreateTagHelperDirectiveDescriptor("System.*, " + assemblyB, TagHelperDirectiveType.RemoveTagHelper) } },