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