From 98e84f791593b744787bc6e4a8e43220e3f65c7e Mon Sep 17 00:00:00 2001 From: Blaise Taylor Date: Fri, 20 Feb 2026 15:27:15 -0500 Subject: [PATCH] Fixes for CodeQL reliability warnings. --- .../ConfigurationHelper.cs | 4 +-- .../ExpressionMapper.cs | 2 +- .../Extensions/VisitorExtensions.cs | 5 +++- ...erMappingsOfLiteralParentTypesMustMatch.cs | 6 ++-- .../Structures/DeclaringMemberKeyTest.cs | 28 ------------------- .../XpressionMapperTests.cs | 4 +-- 6 files changed, 12 insertions(+), 37 deletions(-) diff --git a/src/AutoMapper.Extensions.ExpressionMapping/ConfigurationHelper.cs b/src/AutoMapper.Extensions.ExpressionMapping/ConfigurationHelper.cs index ab362fa..4ca58bc 100644 --- a/src/AutoMapper.Extensions.ExpressionMapping/ConfigurationHelper.cs +++ b/src/AutoMapper.Extensions.ExpressionMapping/ConfigurationHelper.cs @@ -7,12 +7,12 @@ public static class ConfigurationHelper { public static MapperConfiguration GetMapperConfiguration(Action configure) { - return new MapperConfiguration(configure, new NullLoggerFactory()); + return new MapperConfiguration(configure, NullLoggerFactory.Instance); } public static MapperConfiguration GetMapperConfiguration(MapperConfigurationExpression configurationExpression) { - return new MapperConfiguration(configurationExpression, new NullLoggerFactory()); + return new MapperConfiguration(configurationExpression, NullLoggerFactory.Instance); } } } diff --git a/src/AutoMapper.Extensions.ExpressionMapping/ExpressionMapper.cs b/src/AutoMapper.Extensions.ExpressionMapping/ExpressionMapper.cs index 6186ddc..d083aeb 100644 --- a/src/AutoMapper.Extensions.ExpressionMapping/ExpressionMapper.cs +++ b/src/AutoMapper.Extensions.ExpressionMapping/ExpressionMapper.cs @@ -267,7 +267,7 @@ private static Type GetSourceType(PropertyMap propertyMap) => private PropertyMap FindPropertyMapOfExpression(MemberExpression expression) { var propertyMap = PropertyMap(expression); - return propertyMap == null && expression.Expression is MemberExpression memberExpression + return propertyMap == null && expression?.Expression is MemberExpression memberExpression ? FindPropertyMapOfExpression(memberExpression) : propertyMap; } diff --git a/src/AutoMapper.Extensions.ExpressionMapping/Extensions/VisitorExtensions.cs b/src/AutoMapper.Extensions.ExpressionMapping/Extensions/VisitorExtensions.cs index 67f9ad9..5f9d71c 100644 --- a/src/AutoMapper.Extensions.ExpressionMapping/Extensions/VisitorExtensions.cs +++ b/src/AutoMapper.Extensions.ExpressionMapping/Extensions/VisitorExtensions.cs @@ -62,7 +62,7 @@ public static MemberExpression GetMemberExpression(this LambdaExpression expr) => expr.Body.GetUnconvertedExpression() as MemberExpression; public static MemberExpression GetMemberExpression(this Expression expr) - => expr.GetUnconvertedExpression() as MemberExpression; + => expr?.GetUnconvertedExpression() as MemberExpression; /// /// Returns the ParameterExpression for the LINQ parameter. @@ -101,6 +101,9 @@ public static ParameterExpression GetParameterExpression(this Expression express if (isExtension && parentExpression == null && methodExpression.Arguments.Count > 0) parentExpression = methodExpression.Arguments[0];//Method is an extension method based on the type of methodExpression.Arguments[0]. + if (parentExpression == null) + return null; + return GetParameterExpression(parentExpression); } diff --git a/tests/AutoMapper.Extensions.ExpressionMapping.UnitTests/MemberMappingsOfLiteralParentTypesMustMatch.cs b/tests/AutoMapper.Extensions.ExpressionMapping.UnitTests/MemberMappingsOfLiteralParentTypesMustMatch.cs index a652514..a195786 100644 --- a/tests/AutoMapper.Extensions.ExpressionMapping.UnitTests/MemberMappingsOfLiteralParentTypesMustMatch.cs +++ b/tests/AutoMapper.Extensions.ExpressionMapping.UnitTests/MemberMappingsOfLiteralParentTypesMustMatch.cs @@ -11,7 +11,7 @@ public void MappingMemberOfNullableParentToMemberOfNonNullableParentWithoutCusto { //arrange var mapper = GetMapper(); - Expression> expression = x => x.DateTimeOffset.Value.Day.ToString() == "2"; + Expression> expression = x => x.DateTimeOffset.HasValue && x.DateTimeOffset.Value.Day.ToString() == "2"; //act var exception = Assert.Throws(() => mapper.MapExpression>>(expression)); @@ -47,7 +47,7 @@ public void MappingMemberOfNullableParentToMemberOfNonNullableParentWorksUsingCu { //arrange var mapper = GetMapperWithCustomExpressions(); - Expression> expression = x => x.DateTimeOffset.Value.Day.ToString() == "2"; + Expression> expression = x => x.DateTimeOffset.HasValue && x.DateTimeOffset.Value.Day.ToString() == "2"; //act var mappedExpression = mapper.MapExpression>>(expression); @@ -92,7 +92,7 @@ private static IMapper GetMapperWithCustomExpressions() var config = ConfigurationHelper.GetMapperConfiguration(c => { c.CreateMap() - .ForMember(d => d.DateTime, o => o.MapFrom(s => s.DateTime.Value)) + .ForMember(d => d.DateTime, o => o.MapFrom(s => s.DateTime ?? default)) .ForMember(d => d.DateTimeOffset, o => o.MapFrom(s => (DateTimeOffset?)s.DateTimeOffset)); }); config.AssertConfigurationIsValid(); diff --git a/tests/AutoMapper.Extensions.ExpressionMapping.UnitTests/Structures/DeclaringMemberKeyTest.cs b/tests/AutoMapper.Extensions.ExpressionMapping.UnitTests/Structures/DeclaringMemberKeyTest.cs index 85c8cb9..5e72693 100644 --- a/tests/AutoMapper.Extensions.ExpressionMapping.UnitTests/Structures/DeclaringMemberKeyTest.cs +++ b/tests/AutoMapper.Extensions.ExpressionMapping.UnitTests/Structures/DeclaringMemberKeyTest.cs @@ -74,34 +74,6 @@ public void Equals_NullDeclaringMemberKey_ReturnsFalse() Assert.False(result); } - [Fact] - public void Equals_DifferentTypeObject_ReturnsFalse() - { - // Arrange - var key = new DeclaringMemberKey(_testMemberInfo1, TestFullName1); - var otherObject = "some string"; - - // Act - var result = key.Equals(otherObject); - - // Assert - Assert.False(result); - } - - [Fact] - public void Equals_SameValues_ReturnsTrue() - { - // Arrange - var key1 = new DeclaringMemberKey(_testMemberInfo1, TestFullName1); - var key2 = new DeclaringMemberKey(_testMemberInfo1, TestFullName1); - - // Act - var result = key1.Equals(key2); - - // Assert - Assert.True(result); - } - [Fact] public void Equals_DifferentMemberInfo_ReturnsFalse() { diff --git a/tests/AutoMapper.Extensions.ExpressionMapping.UnitTests/XpressionMapperTests.cs b/tests/AutoMapper.Extensions.ExpressionMapping.UnitTests/XpressionMapperTests.cs index f902053..63230e9 100644 --- a/tests/AutoMapper.Extensions.ExpressionMapping.UnitTests/XpressionMapperTests.cs +++ b/tests/AutoMapper.Extensions.ExpressionMapping.UnitTests/XpressionMapperTests.cs @@ -276,7 +276,7 @@ public void Map__flattened_property() { //Arrange int age = 25; - Expression> selection = s => ((s != null ? s.AccountName : null) ?? "").ToLower().StartsWith("P".ToLower()) && ((s.AgeInYears == age) && s.IsActive); + Expression> selection = s => ((s != null ? s.AccountName : null) ?? "").ToLower().StartsWith("P".ToLower()) && s != null && s.AgeInYears == age && s.IsActive; //Act Expression> selectionMapped = mapper.Map>>(selection); @@ -531,7 +531,7 @@ public void Map_to_anonymous_type_when_init_member_is_not_a_literal() public void Map_to_anonymous_type_when_init_member_is_not_a_literal_and_parameter_is_anonymous_type() { //Arrange - Expression, IEnumerable>> expression = q => q.OrderBy(s => s.Id).Select(u => new { UserId = u.Id, Account = u.AccountModel }).Where(a => a.Account.Bal != -1); + Expression, IEnumerable>> expression = q => q.OrderBy(s => s.Id).Select(u => new { UserId = u.Id, Account = u.AccountModel }).Where(a => Math.Abs(a.Account.Bal + 1) > double.Epsilon); //Act Expression, IEnumerable>> expMapped = (Expression, IEnumerable>>)mapper.MapExpression