Skip to content

Commit 17c4ed4

Browse files
committed
CSHARP-5148: Coverity analysis defect 102923: Dereference null return value.
1 parent a47dce3 commit 17c4ed4

File tree

2 files changed

+47
-44
lines changed

2 files changed

+47
-44
lines changed

src/MongoDB.Driver.Core/Core/Misc/ExceptionMapper.cs

Lines changed: 46 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -35,27 +35,28 @@ internal static class ExceptionMapper
3535
/// </returns>
3636
public static Exception Map(ConnectionId connectionId, BsonDocument response)
3737
{
38-
BsonValue code;
39-
if (response.TryGetValue("code", out code) && code.IsNumeric)
38+
if (response != null)
4039
{
41-
switch (code.ToInt32())
40+
if (response.TryGetValue("code", out var code) && code.IsNumeric)
4241
{
43-
case 50:
44-
case 13475:
45-
case 16986:
46-
case 16712:
47-
return new MongoExecutionTimeoutException(connectionId, message: "Operation exceeded time limit.", response);
42+
switch (code.ToInt32())
43+
{
44+
case 50:
45+
case 13475:
46+
case 16986:
47+
case 16712:
48+
return new MongoExecutionTimeoutException(connectionId, message: "Operation exceeded time limit.", response);
49+
}
4850
}
49-
}
5051

51-
// the server sometimes sends a response that is missing the "code" field but does have an "errmsg" field
52-
BsonValue errmsg;
53-
if (response.TryGetValue("errmsg", out errmsg) && errmsg.IsString)
54-
{
55-
if (errmsg.AsString.Contains("exceeded time limit") ||
56-
errmsg.AsString.Contains("execution terminated"))
52+
// the server sometimes sends a response that is missing the "code" field but does have an "errmsg" field
53+
if (response.TryGetValue("errmsg", out var errmsg) && errmsg.IsString)
5754
{
58-
return new MongoExecutionTimeoutException(connectionId, message: "Operation exceeded time limit.");
55+
if (errmsg.AsString.Contains("exceeded time limit") ||
56+
errmsg.AsString.Contains("execution terminated"))
57+
{
58+
return new MongoExecutionTimeoutException(connectionId, message: "Operation exceeded time limit.");
59+
}
5960
}
6061
}
6162

@@ -72,38 +73,40 @@ public static Exception Map(ConnectionId connectionId, BsonDocument response)
7273
/// </returns>
7374
public static Exception Map(ConnectionId connectionId, WriteConcernResult writeConcernResult)
7475
{
75-
var code = GetCode(writeConcernResult.Response);
76-
if (code.HasValue)
76+
if (writeConcernResult != null)
7777
{
78-
switch (code.Value)
78+
var code = GetCode(writeConcernResult.Response);
79+
if (code.HasValue)
7980
{
80-
case 11000:
81-
case 11001:
82-
case 12582:
83-
var errorMessage = string.Format(
84-
"WriteConcern detected an error '{0}'. (Response was {1}).",
85-
writeConcernResult.LastErrorMessage, writeConcernResult.Response.ToJson());
86-
return new MongoDuplicateKeyException(connectionId, errorMessage, writeConcernResult);
81+
switch (code.Value)
82+
{
83+
case 11000:
84+
case 11001:
85+
case 12582:
86+
var errorMessage = string.Format(
87+
"WriteConcern detected an error '{0}'. (Response was {1}).",
88+
writeConcernResult.LastErrorMessage, writeConcernResult.Response.ToJson());
89+
return new MongoDuplicateKeyException(connectionId, errorMessage, writeConcernResult);
90+
}
8791
}
88-
}
89-
90-
bool ok = writeConcernResult.Response.GetValue("ok", false).ToBoolean();
9192

92-
if (!ok)
93-
{
94-
var errorMessage = string.Format(
95-
"WriteConcern detected an error '{0}'. (Response was {1}).",
96-
writeConcernResult.LastErrorMessage, writeConcernResult.Response.ToJson());
97-
return new MongoWriteConcernException(connectionId, errorMessage, writeConcernResult);
98-
}
93+
var ok = writeConcernResult.Response.GetValue("ok", false).ToBoolean();
94+
if (!ok)
95+
{
96+
var errorMessage = string.Format(
97+
"WriteConcern detected an error '{0}'. (Response was {1}).",
98+
writeConcernResult.LastErrorMessage, writeConcernResult.Response.ToJson());
99+
return new MongoWriteConcernException(connectionId, errorMessage, writeConcernResult);
100+
}
99101

100-
if (writeConcernResult.HasLastErrorMessage)
101-
{
102-
var errorMessage = string.Format(
103-
"WriteConcern detected an error '{0}'. (Response was {1}).",
104-
writeConcernResult.LastErrorMessage,
105-
writeConcernResult.Response.ToJson());
106-
return new MongoWriteConcernException(connectionId, errorMessage, writeConcernResult);
102+
if (writeConcernResult.HasLastErrorMessage)
103+
{
104+
var errorMessage = string.Format(
105+
"WriteConcern detected an error '{0}'. (Response was {1}).",
106+
writeConcernResult.LastErrorMessage,
107+
writeConcernResult.Response.ToJson());
108+
return new MongoWriteConcernException(connectionId, errorMessage, writeConcernResult);
109+
}
107110
}
108111

109112
return null;

src/MongoDB.Driver.Core/Core/Operations/BulkWriteOperationResultConverter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public Exception ToWriteConcernException(ConnectionId connectionId, MongoBulkWri
3434
{
3535
var writeConcernResult = ToWriteConcernResult(bulkWriteException.Result, bulkWriteException);
3636

37-
var exception = ExceptionMapper.Map(connectionId, writeConcernResult.Response);
37+
var exception = ExceptionMapper.Map(connectionId, writeConcernResult?.Response);
3838
if (exception == null)
3939
{
4040
exception = ExceptionMapper.Map(connectionId, writeConcernResult);

0 commit comments

Comments
 (0)