diff options
Diffstat (limited to 'src/mongo/db/field_parser.cpp')
-rw-r--r-- | src/mongo/db/field_parser.cpp | 7 |
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; } |