Description
After upgrading from v1.7.1 to v1.7.2, we're getting IndexOutOfRangeException originating from MethodFinder.cs. This did not occur on v1.7.1.
Environment
- System.Linq.Dynamic.Core v1.7.2
- .NET 10
Workaround
Pin to v1.7.1 until this is resolved.
Reproduction
using System.Linq.Dynamic.Core;
using System.Linq.Dynamic.Core.Parser;
using System.Linq.Expressions;
// Repro: string.Concat with 3 args triggers IndexOutOfRangeException in v1.7.2
// Works fine in v1.7.1
var config = ParsingConfig.Default;
config.AllowEqualsAndToStringMethodsOnObject = true;
var parameters = new[]
{
Expression.Parameter(typeof(string), "x"),
Expression.Parameter(typeof(string), "y")
};
var parser = new ExpressionParser(
parameters,
"string.Concat(x, \" - \", y)",
values: null,
config);
// IndexOutOfRangeException thrown here
var result = parser.Parse(typeof(string));
Call Stack
Unhandled exception. System.IndexOutOfRangeException: Index was outside the bounds of the array.
at System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder.FirstIsBetterThanSecond(Expression[] args, MethodData first, MethodData second) in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\SupportedMethods\MethodFinder.cs:line 339
at System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder.<>c__DisplayClass10_1.<FindBestMethodBasedOnArguments>b__3(MethodData n) in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\SupportedMethods\MethodFinder.cs:line 179
at System.Linq.Enumerable.All[TSource](IEnumerable`1 source, Func`2 predicate)
at System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder.<>c__DisplayClass10_0.<FindBestMethodBasedOnArguments>b__2(MethodData m) in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\SupportedMethods\MethodFinder.cs:line 179
at System.Linq.Enumerable.ArrayWhereIterator`1.ToArray(ReadOnlySpan`1 source, Func`2 predicate)
at System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder.FindBestMethodBasedOnArguments(IEnumerable`1 methods, Expression[]& args, MethodBase& method) in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\SupportedMethods\MethodFinder.cs:line 179
at System.Linq.Dynamic.Core.Parser.SupportedMethods.MethodFinder.FindMethod(Type type, String methodName, Boolean staticAccess, Expression& instance, Expression[]& args, MethodBase& method) in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\SupportedMethods\MethodFinder.cs:line 115
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseMemberAccess(Type type, Expression expression, String id) in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 1948
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseTypeAccess(Type type, Boolean getNext) in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 1842
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseIdentifier() in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 1091
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParsePrimaryStart() in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 887
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParsePrimary() in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 855
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseUnary() in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 850
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseArithmetic() in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 795
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseAdditive() in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 742
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseShiftOperator() in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 718
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseComparisonOperator() in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 514
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseLogicalAndOrOperator() in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 446
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseIn() in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 344
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseAndOperator() in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 328
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseOrOperator() in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 310
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseLambdaOperator() in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 288
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseNullCoalescingOperator() in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 275
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseConditionalOperator() in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 259
at System.Linq.Dynamic.Core.Parser.ExpressionParser.Parse(Type resultType, Boolean createParameterCtor) in C:\dev\GitHub\System.Linq.Dynamic.Core\src\System.Linq.Dynamic.Core\Parser\ExpressionParser.cs:line 174
at Program.<Main>$(String[] args)
Command terminated by signal 6
Description
After upgrading from v1.7.1 to v1.7.2, we're getting
IndexOutOfRangeExceptionoriginating fromMethodFinder.cs. This did not occur on v1.7.1.Environment
Workaround
Pin to v1.7.1 until this is resolved.
Reproduction
Call Stack