Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 174a599

Browse files
committed
Fixed crash when a generic resource definition references an interface field from its OnApplySort lambda. Where we used to special-case for Identifiable.Id, we now always use the expression type for resource graph lookups. This is safe because its not possible in C# to remove base members. The value of memberExpression.Expression is null on static member access, which is unlikely to occur in sort lambdas.
1 parent 9af5eda commit 174a599

File tree

2 files changed

+4
-7
lines changed

2 files changed

+4
-7
lines changed

‎src/JsonApiDotNetCore/Resources/SortExpressionLambdaConverter.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,9 @@ private static (Expression? innerExpression, bool isCount) TryReadCount(Expressi
114114

115115
private Expression? ReadAttribute(Expression expression)
116116
{
117-
if (expression is MemberExpression memberExpression)
117+
if (expression is MemberExpression {Expression:{}}memberExpression)
118118
{
119-
ResourceType resourceType = memberExpression.Member.Name == nameof(Identifiable<object>.Id) && memberExpression.Expression != null
120-
? _resourceGraph.GetResourceType(memberExpression.Expression.Type)
121-
: _resourceGraph.GetResourceType(memberExpression.Member.DeclaringType!);
122-
119+
ResourceType resourceType = _resourceGraph.GetResourceType(memberExpression.Expression.Type);
123120
AttrAttribute? attribute = resourceType.FindAttributeByPropertyName(memberExpression.Member.Name);
124121

125122
if (attribute != null)

‎test/JsonApiDotNetCoreTests/UnitTests/ResourceDefinitions/CreateSortExpressionFromLambdaTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public void Can_convert_chain_of_ToOne_relationships_ending_in_attribute()
3737
string[] expected =
3838
{
3939
"-fileEntries:content",
40-
"fileSystemEntries:name",
40+
"fileEntries:name",
4141
"fileEntries:length",
4242
"fileSystemEntries:parent.fileSystemEntries:name",
4343
"fileSystemEntries:parent.fileSystemEntries:parent.fileSystemEntries:name"
@@ -103,7 +103,7 @@ public void Can_convert_chain_with_conversion_to_derived_types()
103103
"fileSystemEntries:parent.fileEntries:content",
104104
"count(directoryEntries:subdirectories)",
105105
"count(fileSystemEntries:parent.directoryEntries:files)",
106-
"-fileSystemEntries:name"
106+
"-directoryEntries:name"
107107
};
108108

109109
expression.ToFullString().Should().Be(string.Join(',', expected));

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /