Commit a7338ab15ae6209dbdefb7121b9051cb8ede5fa2

Authored by m-holger
1 parent 4dba3c95

In JSONParser::handleToken move processing for ls_colon and ls_comma into switch statement

Showing 1 changed file with 14 additions and 17 deletions
libqpdf/JSON.cc
... ... @@ -1156,7 +1156,9 @@ JSONParser::handleToken()
1156 1156 "JSON: offset " + std::to_string(offset) +
1157 1157 ": unexpected colon");
1158 1158 }
1159   - break;
  1159 + parser_state = ps_dict_after_colon;
  1160 + lex_state = ls_top;
  1161 + return;
1160 1162  
1161 1163 case ls_comma:
1162 1164 if (!((parser_state == ps_dict_after_item) ||
... ... @@ -1166,7 +1168,16 @@ JSONParser::handleToken()
1166 1168 "JSON: offset " + std::to_string(offset) +
1167 1169 ": unexpected comma");
1168 1170 }
1169   - break;
  1171 + if (parser_state == ps_dict_after_item) {
  1172 + parser_state = ps_dict_after_comma;
  1173 + } else if (parser_state == ps_array_after_item) {
  1174 + parser_state = ps_array_after_comma;
  1175 + } else {
  1176 + throw std::logic_error("JSONParser::handleToken: unexpected parser"
  1177 + " state for comma");
  1178 + }
  1179 + lex_state = ls_top;
  1180 + return;
1170 1181  
1171 1182 case ls_end_array:
1172 1183 if (!((parser_state == ps_array_begin) ||
... ... @@ -1275,18 +1286,7 @@ JSONParser::handleToken()
1275 1286 // whatever we need to do with it.
1276 1287  
1277 1288 parser_state_e next_state = ps_top;
1278   - if (lex_state == ls_colon) {
1279   - next_state = ps_dict_after_colon;
1280   - } else if (lex_state == ls_comma) {
1281   - if (parser_state == ps_dict_after_item) {
1282   - next_state = ps_dict_after_comma;
1283   - } else if (parser_state == ps_array_after_item) {
1284   - next_state = ps_array_after_comma;
1285   - } else {
1286   - throw std::logic_error("JSONParser::handleToken: unexpected parser"
1287   - " state for comma");
1288   - }
1289   - } else if ((lex_state == ls_end_array) || (lex_state == ls_end_dict)) {
  1289 + if ((lex_state == ls_end_array) || (lex_state == ls_end_dict)) {
1290 1290 next_state = ps_stack.back();
1291 1291 ps_stack.pop_back();
1292 1292 auto tos = stack.back();
... ... @@ -1348,9 +1348,6 @@ JSONParser::handleToken()
1348 1348 throw std::logic_error(
1349 1349 "JSONParser::handleToken: unexpected parser state");
1350 1350 }
1351   - } else {
1352   - throw std::logic_error(
1353   - "JSONParser::handleToken: unexpected null item in transition");
1354 1351 }
1355 1352  
1356 1353 if (reactor && item.get()) {
... ...