Commit 6748bd33f75da96fc45d189028207a392c421eec
1 parent
29093a16
In JSONParser::handleToken remove next_state
Showing
1 changed file
with
11 additions
and
10 deletions
libqpdf/JSON.cc
| @@ -1258,8 +1258,6 @@ JSONParser::handleToken() | @@ -1258,8 +1258,6 @@ JSONParser::handleToken() | ||
| 1258 | break; | 1258 | break; |
| 1259 | } | 1259 | } |
| 1260 | 1260 | ||
| 1261 | - parser_state_e next_state = ps_top; | ||
| 1262 | - | ||
| 1263 | item->setStart(token_start); | 1261 | item->setStart(token_start); |
| 1264 | item->setEnd(offset); | 1262 | item->setEnd(offset); |
| 1265 | 1263 | ||
| @@ -1282,7 +1280,7 @@ JSONParser::handleToken() | @@ -1282,7 +1280,7 @@ JSONParser::handleToken() | ||
| 1282 | if (!reactor || !reactor->dictionaryItem(dict_key, *item)) { | 1280 | if (!reactor || !reactor->dictionaryItem(dict_key, *item)) { |
| 1283 | tos->addDictionaryMember(dict_key, *item); | 1281 | tos->addDictionaryMember(dict_key, *item); |
| 1284 | } | 1282 | } |
| 1285 | - next_state = ps_dict_after_item; | 1283 | + parser_state = ps_dict_after_item; |
| 1286 | break; | 1284 | break; |
| 1287 | 1285 | ||
| 1288 | case ps_array_begin: | 1286 | case ps_array_begin: |
| @@ -1290,12 +1288,16 @@ JSONParser::handleToken() | @@ -1290,12 +1288,16 @@ JSONParser::handleToken() | ||
| 1290 | if (!reactor || !reactor->arrayItem(*item)) { | 1288 | if (!reactor || !reactor->arrayItem(*item)) { |
| 1291 | tos->addArrayElement(*item); | 1289 | tos->addArrayElement(*item); |
| 1292 | } | 1290 | } |
| 1293 | - next_state = ps_array_after_item; | 1291 | + parser_state = ps_array_after_item; |
| 1294 | break; | 1292 | break; |
| 1295 | 1293 | ||
| 1296 | case ps_top: | 1294 | case ps_top: |
| 1297 | - stack.push_back(item); | ||
| 1298 | - next_state = ps_done; | 1295 | + if (!(item->isDictionary() || item->isArray())) { |
| 1296 | + stack.push_back(item); | ||
| 1297 | + parser_state = ps_done; | ||
| 1298 | + return; | ||
| 1299 | + } | ||
| 1300 | + parser_state = ps_done; | ||
| 1299 | break; | 1301 | break; |
| 1300 | 1302 | ||
| 1301 | case ps_dict_after_key: | 1303 | case ps_dict_after_key: |
| @@ -1323,7 +1325,7 @@ JSONParser::handleToken() | @@ -1323,7 +1325,7 @@ JSONParser::handleToken() | ||
| 1323 | 1325 | ||
| 1324 | if (item->isDictionary() || item->isArray()) { | 1326 | if (item->isDictionary() || item->isArray()) { |
| 1325 | stack.push_back(item); | 1327 | stack.push_back(item); |
| 1326 | - ps_stack.push_back(next_state); | 1328 | + ps_stack.push_back(parser_state); |
| 1327 | // Calling container start method is postponed until after | 1329 | // Calling container start method is postponed until after |
| 1328 | // adding the containers to their parent containers, if any. | 1330 | // adding the containers to their parent containers, if any. |
| 1329 | // This makes it much easier to keep track of the current | 1331 | // This makes it much easier to keep track of the current |
| @@ -1332,12 +1334,12 @@ JSONParser::handleToken() | @@ -1332,12 +1334,12 @@ JSONParser::handleToken() | ||
| 1332 | if (reactor) { | 1334 | if (reactor) { |
| 1333 | reactor->dictionaryStart(); | 1335 | reactor->dictionaryStart(); |
| 1334 | } | 1336 | } |
| 1335 | - next_state = ps_dict_begin; | 1337 | + parser_state = ps_dict_begin; |
| 1336 | } else if (item->isArray()) { | 1338 | } else if (item->isArray()) { |
| 1337 | if (reactor) { | 1339 | if (reactor) { |
| 1338 | reactor->arrayStart(); | 1340 | reactor->arrayStart(); |
| 1339 | } | 1341 | } |
| 1340 | - next_state = ps_array_begin; | 1342 | + parser_state = ps_array_begin; |
| 1341 | } | 1343 | } |
| 1342 | 1344 | ||
| 1343 | if (ps_stack.size() > 500) { | 1345 | if (ps_stack.size() > 500) { |
| @@ -1346,7 +1348,6 @@ JSONParser::handleToken() | @@ -1346,7 +1348,6 @@ JSONParser::handleToken() | ||
| 1346 | ": maximum object depth exceeded"); | 1348 | ": maximum object depth exceeded"); |
| 1347 | } | 1349 | } |
| 1348 | } | 1350 | } |
| 1349 | - parser_state = next_state; | ||
| 1350 | } | 1351 | } |
| 1351 | 1352 | ||
| 1352 | std::shared_ptr<JSON> | 1353 | std::shared_ptr<JSON> |