Skip to content

Commit d4e16ac

Browse files
committed
CSHARP-5133: Coverity analysis defect 139566: Explicit null dereferenced.
1 parent 43e673e commit d4e16ac

File tree

1 file changed

+25
-17
lines changed

1 file changed

+25
-17
lines changed

src/MongoDB.Driver/Linq/Linq3Implementation/Translators/ExpressionToAggregationExpressionTranslators/MemberInitExpressionToAggregationExpressionTranslator.cs

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -39,28 +39,36 @@ public static AggregationExpression Translate(
3939
var constructorInfo = newExpression.Constructor; // note: can be null when using the default constructor with a struct
4040
var constructorArguments = newExpression.Arguments;
4141
var computedFields = new List<AstComputedField>();
42-
4342
var classMap = CreateClassMap(newExpression.Type, constructorInfo, out var creatorMap);
43+
4444
if (constructorInfo != null && creatorMap != null)
4545
{
46+
var constructorParameters = constructorInfo.GetParameters();
4647
var creatorMapParameters = creatorMap.Arguments?.ToArray();
47-
if (constructorInfo.GetParameters().Length > 0 && creatorMapParameters == null)
48-
{
49-
throw new ExpressionNotSupportedException(expression, because: $"couldn't find matching properties for constructor parameters.");
50-
}
51-
52-
for (var i = 0; i < creatorMapParameters.Length; i++)
48+
if (constructorParameters.Length > 0)
5349
{
54-
var creatorMapParameter = creatorMapParameters[i];
55-
var constructorArgumentExpression = constructorArguments[i];
56-
var constructorArgumentTranslation = ExpressionToAggregationExpressionTranslator.Translate(context, constructorArgumentExpression);
57-
var constructorArgumentType = constructorArgumentExpression.Type;
58-
var constructorArgumentSerializer = constructorArgumentTranslation.Serializer ?? BsonSerializer.LookupSerializer(constructorArgumentType);
59-
var memberMap = EnsureMemberMap(expression, classMap, creatorMapParameter);
60-
EnsureDefaultValue(memberMap);
61-
var memberSerializer = CoerceSourceSerializerToMemberSerializer(memberMap, constructorArgumentSerializer);
62-
memberMap.SetSerializer(memberSerializer);
63-
computedFields.Add(AstExpression.ComputedField(memberMap.ElementName, constructorArgumentTranslation.Ast));
50+
if (creatorMapParameters == null)
51+
{
52+
throw new ExpressionNotSupportedException(expression, because: $"couldn't find matching properties for constructor parameters.");
53+
}
54+
if (creatorMapParameters.Length != constructorParameters.Length)
55+
{
56+
throw new ExpressionNotSupportedException(expression, because: $"the constructor has {constructorParameters} parameters but the creatorMap has {creatorMapParameters.Length} parameters.");
57+
}
58+
59+
for (var i = 0; i < creatorMapParameters.Length; i++)
60+
{
61+
var creatorMapParameter = creatorMapParameters[i];
62+
var constructorArgumentExpression = constructorArguments[i];
63+
var constructorArgumentTranslation = ExpressionToAggregationExpressionTranslator.Translate(context, constructorArgumentExpression);
64+
var constructorArgumentType = constructorArgumentExpression.Type;
65+
var constructorArgumentSerializer = constructorArgumentTranslation.Serializer ?? BsonSerializer.LookupSerializer(constructorArgumentType);
66+
var memberMap = EnsureMemberMap(expression, classMap, creatorMapParameter);
67+
EnsureDefaultValue(memberMap);
68+
var memberSerializer = CoerceSourceSerializerToMemberSerializer(memberMap, constructorArgumentSerializer);
69+
memberMap.SetSerializer(memberSerializer);
70+
computedFields.Add(AstExpression.ComputedField(memberMap.ElementName, constructorArgumentTranslation.Ast));
71+
}
6472
}
6573
}
6674

0 commit comments

Comments
 (0)