summaryrefslogtreecommitdiff
path: root/src/mongo/db/field_parser.cpp
diff options
context:
space:
mode:
authorGeert Bosch <geert.bosch@mongodb.com>2019-12-22 14:15:44 +0000
committerevergreen <evergreen@mongodb.com>2019-12-22 14:15:44 +0000
commit230c60a4f74e09bd5b5dd55112e4ae37be4e94f3 (patch)
tree5ac3d6cb9935205f6b92e77447bf7f1cb79c45bc /src/mongo/db/field_parser.cpp
parent8add28c5da7d9906aa3625fce074612f634e1619 (diff)
downloadmongo-230c60a4f74e09bd5b5dd55112e4ae37be4e94f3.tar.gz
SERVER-45214 FieldParser::extractNumber fails ubsan for NaNs
Diffstat (limited to 'src/mongo/db/field_parser.cpp')
-rw-r--r--src/mongo/db/field_parser.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/mongo/db/field_parser.cpp b/src/mongo/db/field_parser.cpp
index a72c03b81d2..94207bf7d22 100644
--- a/src/mongo/db/field_parser.cpp
+++ b/src/mongo/db/field_parser.cpp
@@ -294,7 +294,10 @@ FieldParser::FieldState FieldParser::extractNumber(BSONElement elem,
}
if (elem.isNumber()) {
- *out = elem.numberInt();
+ auto num = std::clamp(elem.safeNumberLong(),
+ static_cast<long long>(std::numeric_limits<int>::min()),
+ static_cast<long long>(std::numeric_limits<int>::max()));
+ *out = static_cast<int>(num);
return FIELD_SET;
}
@@ -352,7 +355,7 @@ FieldParser::FieldState FieldParser::extractNumber(BSONElement elem,
}
if (elem.isNumber()) {
- *out = elem.numberLong();
+ *out = elem.safeNumberLong();
return FIELD_SET;
}