Removed support for regex type names in @addTagHelper and @removeTagHelper

- #426
- Updated tests to not use regex patterns
This commit is contained in:
Ajay Bhargav Baaskaran 2015-09-22 15:19:10 -07:00
parent 7239eb015c
commit 3f34add497
2 changed files with 37 additions and 196 deletions

View File

@ -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)

View File

@ -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<string, IEnumerable<Type>>
{
{ assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } },
},
new []
{
CreateTagHelperDirectiveDescriptor(
Valid_PlainTagHelperType.Namespace + ".Valid?Plain*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
},
new [] { Valid_PlainTagHelperDescriptor }
},
{
new Dictionary<string, IEnumerable<Type>>
{
{ assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } },
},
new []
{
CreateTagHelperDirectiveDescriptor(
"*Plain*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
},
new [] { Valid_PlainTagHelperDescriptor }
},
{
new Dictionary<string, IEnumerable<Type>>
{
{ assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } },
},
new []
{
CreateTagHelperDirectiveDescriptor(
"*Plain?*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
},
new [] { Valid_PlainTagHelperDescriptor }
},
{
new Dictionary<string, IEnumerable<Type>>
{
@ -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<string, IEnumerable<Type>>
{
{ assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } },
},
new []
{
CreateTagHelperDirectiveDescriptor(
"*?*l?in*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
},
new [] { Valid_PlainTagHelperDescriptor }
},
{
new Dictionary<string, IEnumerable<Type>>
{
{ assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } },
},
new []
{
CreateTagHelperDirectiveDescriptor(
"*" + Valid_PlainTagHelperType.FullName + "*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
},
new [] { Valid_PlainTagHelperDescriptor }
},
{
new Dictionary<string, IEnumerable<Type>>
{
{ assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } },
},
new []
{
CreateTagHelperDirectiveDescriptor(
"*" + Valid_PlainTagHelperType.FullName + "*, " + assemblyA,
TagHelperDirectiveType.AddTagHelper),
},
new [] { Valid_PlainTagHelperDescriptor }
},
{
new Dictionary<string, IEnumerable<Type>>
{
{ assemblyA, new [] { Valid_PlainTagHelperType, Valid_InheritedTagHelperType } }
},
new []
{
CreateTagHelperDirectiveDescriptor("*, " + assemblyA, TagHelperDirectiveType.AddTagHelper),
CreateTagHelperDirectiveDescriptor(
"*_*la*, " + assemblyA,
TagHelperDirectiveType.RemoveTagHelper)
},
new [] { Valid_InheritedTagHelperDescriptor }
},
{
new Dictionary<string, IEnumerable<Type>>
{
@ -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<string, IEnumerable<Type>>
{
{ 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<string, IEnumerable<Type>>
{
{ 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<string, IEnumerable<Type>>
{
@ -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<string, IEnumerable<Type>>
{
{ 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)
}
},