Commit a9a0667904b467a054b5f7747bc16afba2612d7f

Authored by m-holger
1 parent 126dd31c

Make JSONParser::getToken responsible for decoding strings

Showing 1 changed file with 5 additions and 8 deletions
libqpdf/JSON.cc
... ... @@ -1052,6 +1052,9 @@ JSONParser::getToken()
1052 1052  
1053 1053 case ls_string:
1054 1054 if (*p == '"') {
  1055 + token += '"';
  1056 + token = decode_string(token, token_start);
  1057 + action = ignore;
1055 1058 ready = true;
1056 1059 } else if (*p == '\\') {
1057 1060 lex_state = ls_backslash;
... ... @@ -1146,7 +1149,6 @@ JSONParser::handleToken()
1146 1149 ": material follows end of object: " + token);
1147 1150 }
1148 1151  
1149   - std::string s_value;
1150 1152 std::shared_ptr<JSON> item;
1151 1153 auto tos = stack.empty() ? nullptr : stack.back().item;
1152 1154 auto ls = lex_state;
... ... @@ -1245,19 +1247,14 @@ JSONParser::handleToken()
1245 1247 break;
1246 1248  
1247 1249 case ls_string:
1248   - // Token includes the quotation marks
1249   - if (token.length() < 2) {
1250   - throw std::logic_error("JSON string length < 2");
1251   - }
1252   - s_value = decode_string(token, token_start);
1253 1250 if (parser_state == ps_dict_begin ||
1254 1251 parser_state == ps_dict_after_comma) {
1255   - dict_key = s_value;
  1252 + dict_key = token;
1256 1253 dict_key_offset = token_start;
1257 1254 parser_state = ps_dict_after_key;
1258 1255 return;
1259 1256 } else {
1260   - item = std::make_shared<JSON>(JSON::makeString(s_value));
  1257 + item = std::make_shared<JSON>(JSON::makeString(token));
1261 1258 }
1262 1259 break;
1263 1260  
... ...