diff --git a/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpCodeParser.cs b/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpCodeParser.cs index be60ad7081..9a7e45378a 100644 --- a/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpCodeParser.cs +++ b/src/Microsoft.AspNetCore.Razor.Language/Legacy/CSharpCodeParser.cs @@ -2032,7 +2032,9 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy // 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) + lookupStrings.Length != 2 || + text.StartsWith("'") || + text.EndsWith("'")) { errors.Add( RazorDiagnostic.Create( diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpDirectivesTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpDirectivesTest.cs index e77d07f418..29cdff255b 100644 --- a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpDirectivesTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpDirectivesTest.cs @@ -1203,6 +1203,31 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy legacyErrors: expectedErrors))); } + [Fact] + public void RemoveTagHelperDirective_SingleQuotes_AddsError() + { + var expectedErrors = new[] + { + new RazorError( + Resources.FormatInvalidTagHelperLookupText("'*, Foo'"), + new SourceLocation(17, 0, 17), + length: 8) + }; + + ParseBlockTest("@removeTagHelper '*, Foo'", + new DirectiveBlock( + Factory.CodeTransition(), + Factory.MetaCode(SyntaxConstants.CSharp.RemoveTagHelperKeyword) + .Accepts(AcceptedCharactersInternal.None), + Factory.Span(SpanKindInternal.Markup, " ", markup: false) + .Accepts(AcceptedCharactersInternal.None), + Factory.Code("'*, Foo'") + .AsRemoveTagHelper( + "'*, Foo'", + "'*, Foo'", + legacyErrors: expectedErrors))); + } + [Fact] public void RemoveTagHelperDirective_WithQuotes_InvalidLookupText_AddsError() { @@ -1421,6 +1446,31 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy legacyErrors: expectedErrors))); } + [Fact] + public void AddTagHelperDirective_SingleQuotes_AddsError() + { + var expectedErrors = new[] + { + new RazorError( + Resources.FormatInvalidTagHelperLookupText("'*, Foo'"), + new SourceLocation(14, 0, 14), + length: 8) + }; + + ParseBlockTest("@addTagHelper '*, Foo'", + new DirectiveBlock( + Factory.CodeTransition(), + Factory.MetaCode(SyntaxConstants.CSharp.AddTagHelperKeyword) + .Accepts(AcceptedCharactersInternal.None), + Factory.Span(SpanKindInternal.Markup, " ", markup: false) + .Accepts(AcceptedCharactersInternal.None), + Factory.Code("'*, Foo'") + .AsAddTagHelper( + "'*, Foo'", + "'*, Foo'", + legacyErrors: expectedErrors))); + } + [Fact] public void AddTagHelperDirective_SupportsSpaces() {