diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryTokenizer.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryTokenizer.cs index cd920554c9..37f29da58d 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryTokenizer.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryTokenizer.cs @@ -87,7 +87,7 @@ public IEnumerable EnumerateTokens() } else { - if (_textBuffer.Length == 0 && ch == ' ' && !_isInQuotedSection) + if (ch == ' ' && !_isInQuotedSection) { throw new QueryParseException("Unexpected whitespace."); } diff --git a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/FilterParseTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/FilterParseTests.cs index 562270a358..140ce94c94 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/FilterParseTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/FilterParseTests.cs @@ -66,6 +66,7 @@ public void Reader_Is_Enabled(JsonApiQueryStringParameters parametersDisabled, b [InlineData("filter[posts]", "equals(author,'some')", "Attribute 'author' does not exist on resource type 'blogPosts'.")] [InlineData("filter[posts]", "lessThan(author,null)", "Attribute 'author' does not exist on resource type 'blogPosts'.")] [InlineData("filter", " ", "Unexpected whitespace.")] + [InlineData("filter", "contains(owner.displayName ,)", "Unexpected whitespace.")] [InlineData("filter", "contains(owner.displayName, )", "Unexpected whitespace.")] [InlineData("filter", "some", "Filter function expected.")] [InlineData("filter", "equals", "( expected.")] @@ -73,6 +74,8 @@ public void Reader_Is_Enabled(JsonApiQueryStringParameters parametersDisabled, b [InlineData("filter", "equals(", "Count function or field name expected.")] [InlineData("filter", "equals('1'", "Count function or field name expected.")] [InlineData("filter", "equals(count(posts),", "Count function, value between quotes, null or field name expected.")] + [InlineData("filter", "equals(owner..displayName,'')", "Count function or field name expected.")] + [InlineData("filter", "equals(owner.displayName.,'')", "Count function or field name expected.")] [InlineData("filter", "equals(title,')", "' expected.")] [InlineData("filter", "equals(title,null", ") expected.")] [InlineData("filter", "equals(null", "Field 'null' does not exist on resource type 'blogs'.")]