@@ -98,15 +98,30 @@ TEST_CASE("BJData")
98
98
{
99
99
SECTION (" array" )
100
100
{
101
+ SECTION (" optimized array: negative size" )
102
+ {
103
+ std::vector<uint8_t > vM = {' [' , ' $' , ' M' , ' #' , ' [' , ' I' , 0x00 , 0x20 , ' M' , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x20 , 0xFF , ' ]' };
104
+ std::vector<uint8_t > vMX = {' [' , ' $' , ' U' , ' #' , ' [' , ' M' , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , ' U' , 0x01 , ' ]' };
105
+
106
+ json _;
107
+ CHECK_THROWS_WITH_AS (_ = json::from_bjdata (vM), " [json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow" , json::out_of_range&);
108
+ CHECK (json::from_bjdata (vM, true , false ).is_discarded ());
109
+
110
+ CHECK_THROWS_WITH_AS (_ = json::from_bjdata (vMX), " [json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow" , json::out_of_range&);
111
+ CHECK (json::from_bjdata (vMX, true , false ).is_discarded ());
112
+ }
113
+
101
114
SECTION (" optimized array: integer value overflow" )
102
115
{
103
116
std::vector<uint8_t > vL = {' [' , ' #' , ' L' , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x7F };
104
117
std::vector<uint8_t > vM = {' [' , ' $' , ' M' , ' #' , ' [' , ' I' , 0x00 , 0x20 , ' M' , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x20 , 0xFF , ' ]' };
105
118
106
119
json _;
107
120
CHECK_THROWS_WITH_AS (_ = json::from_bjdata (vL), " [json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow" , json::out_of_range&);
121
+ CHECK (json::from_bjdata (vL, true , false ).is_discarded ());
108
122
109
123
CHECK_THROWS_WITH_AS (_ = json::from_bjdata (vM), " [json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow" , json::out_of_range&);
124
+ CHECK (json::from_bjdata (vM, true , false ).is_discarded ());
110
125
}
111
126
}
112
127
}
0 commit comments