| Index: core/src/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp
|
| diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp
|
| index 187d6152e96ceccc76c7f7ee4be604d6aa1d40da..5e312e3eecb1c00d2440491faf50b7d78709286b 100644
|
| --- a/core/src/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp
|
| +++ b/core/src/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp
|
| @@ -7,6 +7,7 @@
|
| #include "../../../include/fpdfapi/fpdf_page.h"
|
| #include "../../../include/fpdfapi/fpdf_module.h"
|
| #include "../../../include/fxcodec/fx_codec.h"
|
| +#include "../../../include/fxcrt/fx_ext.h"
|
| #include "pageint.h"
|
| #include <limits.h>
|
|
|
| @@ -788,7 +789,7 @@ CFX_ByteString CPDF_StreamParser::ReadString() {
|
| break;
|
| case 1:
|
| if (ch >= '0' && ch <= '7') {
|
| - iEscCode = ch - '0';
|
| + iEscCode = FXSYS_toDecimalDigit(ch);
|
| status = 2;
|
| break;
|
| }
|
| @@ -813,7 +814,7 @@ CFX_ByteString CPDF_StreamParser::ReadString() {
|
| break;
|
| case 2:
|
| if (ch >= '0' && ch <= '7') {
|
| - iEscCode = iEscCode * 8 + ch - '0';
|
| + iEscCode = iEscCode * 8 + FXSYS_toDecimalDigit(ch);
|
| status = 3;
|
| } else {
|
| buf.AppendChar(iEscCode);
|
| @@ -823,7 +824,7 @@ CFX_ByteString CPDF_StreamParser::ReadString() {
|
| break;
|
| case 3:
|
| if (ch >= '0' && ch <= '7') {
|
| - iEscCode = iEscCode * 8 + ch - '0';
|
| + iEscCode = iEscCode * 8 + FXSYS_toDecimalDigit(ch);
|
| buf.AppendChar(iEscCode);
|
| status = 0;
|
| } else {
|
| @@ -856,50 +857,33 @@ CFX_ByteString CPDF_StreamParser::ReadHexString() {
|
| if (!PositionIsInBounds())
|
| return CFX_ByteString();
|
|
|
| - int ch = m_pBuf[m_Pos++];
|
| CFX_ByteTextBuf buf;
|
| - FX_BOOL bFirst = TRUE;
|
| + bool bFirst = true;
|
| int code = 0;
|
| - while (1) {
|
| - if (ch == '>') {
|
| - break;
|
| - }
|
| - if (ch >= '0' && ch <= '9') {
|
| - if (bFirst) {
|
| - code = (ch - '0') * 16;
|
| - } else {
|
| - code += ch - '0';
|
| - buf.AppendChar((char)code);
|
| - }
|
| - bFirst = !bFirst;
|
| - } else if (ch >= 'A' && ch <= 'F') {
|
| - if (bFirst) {
|
| - code = (ch - 'A' + 10) * 16;
|
| - } else {
|
| - code += ch - 'A' + 10;
|
| - buf.AppendChar((char)code);
|
| - }
|
| - bFirst = !bFirst;
|
| - } else if (ch >= 'a' && ch <= 'f') {
|
| - if (bFirst) {
|
| - code = (ch - 'a' + 10) * 16;
|
| - } else {
|
| - code += ch - 'a' + 10;
|
| - buf.AppendChar((char)code);
|
| - }
|
| - bFirst = !bFirst;
|
| - }
|
| - if (!PositionIsInBounds())
|
| + while (PositionIsInBounds()) {
|
| + int ch = m_pBuf[m_Pos++];
|
| +
|
| + if (ch == '>')
|
| break;
|
|
|
| - ch = m_pBuf[m_Pos++];
|
| + if (!std::isxdigit(ch))
|
| + continue;
|
| +
|
| + int val = FXSYS_toHexDigit(ch);
|
| + if (bFirst) {
|
| + code = val * 16;
|
| + } else {
|
| + code += val;
|
| + buf.AppendByte((uint8_t)code);
|
| + }
|
| + bFirst = !bFirst;
|
| }
|
| - if (!bFirst) {
|
| + if (!bFirst)
|
| buf.AppendChar((char)code);
|
| - }
|
| - if (buf.GetLength() > MAX_STRING_LENGTH) {
|
| +
|
| + if (buf.GetLength() > MAX_STRING_LENGTH)
|
| return CFX_ByteString(buf.GetBuffer(), MAX_STRING_LENGTH);
|
| - }
|
| +
|
| return buf.GetByteString();
|
| }
|
|
|
|
|