aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFTokenizer.cc
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2022-10-04 23:37:23 +0200
committerJay Berkenbilt <jberkenbilt@users.noreply.github.com>2023-01-07 21:24:51 +0100
commita07d2b4190bc0db778a254733dac88dccd5757fd (patch)
treea185a6bfd643726230ec578d52aed5d8f431ad1a /libqpdf/QPDFTokenizer.cc
parent59191ebbc4c017385c6dbf69cb7d7823336f4509 (diff)
downloadqpdf-a07d2b4190bc0db778a254733dac88dccd5757fd.tar.zst
Only build QPDFTokenizer::val for name and string tokens
For all other token types val and raw_val are identical.
Diffstat (limited to 'libqpdf/QPDFTokenizer.cc')
-rw-r--r--libqpdf/QPDFTokenizer.cc41
1 files changed, 4 insertions, 37 deletions
diff --git a/libqpdf/QPDFTokenizer.cc b/libqpdf/QPDFTokenizer.cc
index b11ff0fc..b828691c 100644
--- a/libqpdf/QPDFTokenizer.cc
+++ b/libqpdf/QPDFTokenizer.cc
@@ -261,15 +261,11 @@ QPDFTokenizer::inBeforeToken(char ch)
this->in_token = this->include_ignorable;
if (this->include_ignorable) {
this->state = st_in_space;
- this->val += ch;
}
} else if (ch == '%') {
this->before_token = !this->include_ignorable;
this->in_token = this->include_ignorable;
this->state = st_in_comment;
- if (this->include_ignorable) {
- this->val += ch;
- }
} else {
this->before_token = false;
this->in_token = true;
@@ -298,32 +294,27 @@ QPDFTokenizer::inTop(char ch)
this->type = tt_bad;
QTC::TC("qpdf", "QPDFTokenizer bad )");
this->error_message = "unexpected )";
- this->val += ch;
this->state = st_token_ready;
return;
case '[':
this->type = tt_array_open;
this->state = st_token_ready;
- this->val += ch;
return;
case ']':
this->type = tt_array_close;
- this->val += ch;
this->state = st_token_ready;
return;
case '{':
this->type = tt_brace_open;
this->state = st_token_ready;
- this->val += ch;
return;
case '}':
this->type = tt_brace_close;
this->state = st_token_ready;
- this->val += ch;
return;
case '/':
@@ -342,23 +333,19 @@ QPDFTokenizer::inTop(char ch)
case '8':
case '9':
this->state = st_number;
- this->val += ch;
return;
case '+':
case '-':
this->state = st_sign;
- this->val += ch;
return;
case '.':
this->state = st_decimal;
- this->val += ch;
return;
default:
this->state = st_literal;
- this->val += ch;
return;
}
}
@@ -372,10 +359,6 @@ QPDFTokenizer::inSpace(char ch)
this->in_token = false;
this->char_to_unread = ch;
this->state = st_token_ready;
- return;
- } else {
- this->val += ch;
- return;
}
}
@@ -391,8 +374,6 @@ QPDFTokenizer::inComment(char ch)
} else {
this->state = st_before_token;
}
- } else if (this->include_ignorable) {
- this->val += ch;
}
}
@@ -527,10 +508,8 @@ QPDFTokenizer::inSign(char ch)
{
if (QUtil::is_digit(ch)) {
this->state = st_number;
- this->val += ch;
} else if (ch == '.') {
this->state = st_decimal;
- this->val += ch;
} else {
this->state = st_literal;
inLiteral(ch);
@@ -542,7 +521,6 @@ QPDFTokenizer::inDecimal(char ch)
{
if (QUtil::is_digit(ch)) {
this->state = st_real;
- this->val += ch;
} else {
this->state = st_literal;
inLiteral(ch);
@@ -553,10 +531,8 @@ void
QPDFTokenizer::inNumber(char ch)
{
if (QUtil::is_digit(ch)) {
- this->val += ch;
} else if (ch == '.') {
this->state = st_real;
- this->val += ch;
} else if (isDelimiter(ch)) {
this->type = tt_integer;
this->state = st_token_ready;
@@ -564,7 +540,6 @@ QPDFTokenizer::inNumber(char ch)
this->char_to_unread = ch;
} else {
this->state = st_literal;
- this->val += ch;
}
}
@@ -572,7 +547,6 @@ void
QPDFTokenizer::inReal(char ch)
{
if (QUtil::is_digit(ch)) {
- this->val += ch;
} else if (isDelimiter(ch)) {
this->type = tt_real;
this->state = st_token_ready;
@@ -580,7 +554,6 @@ QPDFTokenizer::inReal(char ch)
this->char_to_unread = ch;
} else {
this->state = st_literal;
- this->val += ch;
}
}
void
@@ -649,7 +622,6 @@ void
QPDFTokenizer::inLt(char ch)
{
if (ch == '<') {
- this->val += "<<";
this->type = tt_dict_open;
this->state = st_token_ready;
return;
@@ -663,11 +635,9 @@ void
QPDFTokenizer::inGt(char ch)
{
if (ch == '>') {
- this->val += ">>";
this->type = tt_dict_close;
this->state = st_token_ready;
} else {
- this->val += ">";
this->type = tt_bad;
QTC::TC("qpdf", "QPDFTokenizer bad >");
this->error_message = "unexpected >";
@@ -692,11 +662,9 @@ QPDFTokenizer::inLiteral(char ch)
this->in_token = false;
this->char_to_unread = ch;
this->state = st_token_ready;
- this->type = (this->val == "true") || (this->val == "false")
+ this->type = (this->raw_val == "true") || (this->raw_val == "false")
? tt_bool
- : (this->val == "null" ? tt_null : tt_word);
- } else {
- this->val += ch;
+ : (this->raw_val == "null" ? tt_null : tt_word);
}
}
@@ -783,8 +751,7 @@ QPDFTokenizer::inCharCode(char ch)
void
QPDFTokenizer::inInlineImage(char ch)
{
- this->val += ch;
- if (this->val.length() == this->inline_image_bytes) {
+ if ((this->raw_val.length() + 1) == this->inline_image_bytes) {
QTC::TC("qpdf", "QPDFTokenizer found EI by byte count");
this->type = tt_inline_image;
this->inline_image_bytes = 0;
@@ -951,7 +918,7 @@ QPDFTokenizer::getToken(Token& token, bool& unread_char, char& ch)
unread_char = !this->in_token && !this->before_token;
ch = this->char_to_unread;
if (ready) {
- token = (this->type == tt_bad)
+ token = (!(this->type == tt_name || this->type == tt_string))
? Token(
this->type, this->raw_val, this->raw_val, this->error_message)
: Token(this->type, this->val, this->raw_val, this->error_message);