aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFTokenizer.cc
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2022-08-20 16:44:44 +0200
committerm-holger <m-holger@kubitscheck.org>2022-08-25 11:55:45 +0200
commit6111a6a424324ed8d926852ed6ba22d4bf13fa62 (patch)
tree1997fa803aca9d0b6340fc0ae0de5231c5835b56 /libqpdf/QPDFTokenizer.cc
parente7889ec5dc3ae5caf942bb242f802b7a19a6b2c5 (diff)
downloadqpdf-6111a6a424324ed8d926852ed6ba22d4bf13fa62.tar.zst
Refactor QPDFTokenizer::inCharCode
Diffstat (limited to 'libqpdf/QPDFTokenizer.cc')
-rw-r--r--libqpdf/QPDFTokenizer.cc26
1 files changed, 11 insertions, 15 deletions
diff --git a/libqpdf/QPDFTokenizer.cc b/libqpdf/QPDFTokenizer.cc
index b07b6e1b..3b601af3 100644
--- a/libqpdf/QPDFTokenizer.cc
+++ b/libqpdf/QPDFTokenizer.cc
@@ -242,7 +242,6 @@ QPDFTokenizer::handleCharacter(char ch)
case '(':
this->string_depth = 1;
- memset(this->bs_num_register, '\0', sizeof(this->bs_num_register));
this->state = st_in_string;
return;
@@ -348,7 +347,7 @@ QPDFTokenizer::handleCharacter(char ch)
}
return;
- case (st_in_string):
+ case st_in_string:
inString(ch);
return;
@@ -372,6 +371,8 @@ QPDFTokenizer::handleCharacter(char ch)
case '6':
case '7':
this->state = st_char_code;
+ this->char_code = 0;
+ this->digit_count = 0;
inCharCode(ch);
return;
@@ -561,22 +562,17 @@ QPDFTokenizer::inString(char ch)
void
QPDFTokenizer::inCharCode(char ch)
{
- size_t bs_num_count = strlen(this->bs_num_register);
- bool ch_is_octal = ('0' <= ch && ch <= '7');
- if ((bs_num_count == 3) || ((bs_num_count > 0) && (!ch_is_octal))) {
+ if (('0' <= ch) && (ch <= '7')) {
+ this->char_code = 8 * this->char_code + (int(ch) - int('0'));
+ if (++(this->digit_count) < 3) {
+ return;
+ }
// We've accumulated \ddd. PDF Spec says to ignore
// high-order overflow.
- this->val +=
- static_cast<char>(strtol(this->bs_num_register, nullptr, 8));
- memset(this->bs_num_register, '\0', sizeof(this->bs_num_register));
- bs_num_count = 0;
- this->state = st_in_string;
- inString(ch);
- return;
- } else if (ch_is_octal) {
- this->bs_num_register[bs_num_count++] = ch;
- return;
}
+ this->val += char(this->char_code % 256);
+ this->state = st_in_string;
+ return;
}
void