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(); |
} |