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