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 8d155e787b97c731e77feef064be752fec631fd6..a1aa686248000731f12eebc014ac2d65828425b1 100644 |
--- a/core/src/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp |
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp |
@@ -11,6 +11,7 @@ |
#include "core/include/fpdfapi/fpdf_module.h" |
#include "core/include/fpdfapi/fpdf_page.h" |
#include "core/include/fxcodec/fx_codec.h" |
+#include "core/include/fxcrt/fx_ext.h" |
namespace { |
@@ -791,7 +792,7 @@ CFX_ByteString CPDF_StreamParser::ReadString() { |
break; |
case 1: |
if (ch >= '0' && ch <= '7') { |
- iEscCode = ch - '0'; |
+ iEscCode = FXSYS_toDecimalDigit(ch); |
status = 2; |
break; |
} |
@@ -816,7 +817,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); |
@@ -826,7 +827,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 { |
@@ -859,50 +860,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(); |
} |