From 6ea543e6c731db30b0807f531a445a66c66619b9 Mon Sep 17 00:00:00 2001 From: m-holger Date: Tue, 24 Jan 2023 13:04:31 +0000 Subject: In JSONParser add lex_state ls_number_e_sign --- libqpdf/JSON.cc | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'libqpdf') diff --git a/libqpdf/JSON.cc b/libqpdf/JSON.cc index d6baf584..8e55b08c 100644 --- a/libqpdf/JSON.cc +++ b/libqpdf/JSON.cc @@ -653,6 +653,7 @@ namespace ls_number_point, ls_number_after_point, ls_number_e, + ls_number_e_sign, ls_alpha, ls_string, ls_backslash, @@ -988,6 +989,14 @@ JSONParser::getToken() ++number_after_e; lex_state = ls_number; } else if ((*p == '+') || (*p == '-')) { + lex_state = ls_number_e_sign; + } else { + numberError(); + } + break; + + case ls_number_e_sign: + if ((*p >= '0') && (*p <= '9')) { lex_state = ls_number; } else { numberError(); @@ -1120,13 +1129,14 @@ JSONParser::getToken() throw std::logic_error("tok_start set in ls_top while parsing"); break; + case ls_number: + case ls_number_minus: + case ls_number_leading_zero: case ls_number_before_point: case ls_number_point: case ls_number_after_point: case ls_number_e: - case ls_number: - case ls_number_minus: - case ls_number_leading_zero: + case ls_number_e_sign: case ls_alpha: // okay break; @@ -1206,6 +1216,7 @@ JSONParser::handleToken() case ls_number_point: case ls_number_after_point: case ls_number_e: + case ls_number_e_sign: if (number_saw_point && (number_after_point == 0)) { // QTC::TC("libtests", "JSON parse decimal with no digits"); throw std::runtime_error( -- cgit v1.2.3-54-g00ecf