diff options
author | dan sinclair <dsinclair@chromium.org> | 2015-11-10 13:17:58 -0500 |
---|---|---|
committer | dan sinclair <dsinclair@chromium.org> | 2015-11-10 13:17:58 -0500 |
commit | b27902b8995bb3e003daed6b0811ed746763c68d (patch) | |
tree | 26817dd2ff198b9c93db85724171766b87077a54 /core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp | |
parent | c813e21d261c24867234107f2e2ca72e15cb2534 (diff) | |
download | pdfium-b27902b8995bb3e003daed6b0811ed746763c68d.tar.xz |
Revert "Revert "Revert "Revert "Cleanup some numeric code.""""
This reverts commit da06e60fb5a095a91c9a4f509466667878624cb3.
Cleanup some numeric code.
This changes the various comparisons of char >= '0' && char <= '9' and
char < '0' || char > '9' to use std::isdigit checks. It also cleans up
a handful of hex to digit conversions to call one common method.
R=tsepez@chromium.org
Review URL: https://codereview.chromium.org/1433513002 .
Diffstat (limited to 'core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp')
-rw-r--r-- | core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp index ff0519c9b5..b2c7963d58 100644 --- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp +++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_decode.cpp @@ -9,6 +9,7 @@ #include "core/include/fpdfapi/fpdf_module.h" #include "core/include/fpdfapi/fpdf_parser.h" #include "core/include/fxcodec/fx_codec.h" +#include "core/include/fxcrt/fx_ext.h" #define _STREAM_MAX_SIZE_ 20 * 1024 * 1024 @@ -129,37 +130,32 @@ FX_DWORD HexDecode(const uint8_t* src_buf, } dest_buf = FX_Alloc(uint8_t, i / 2 + 1); dest_size = 0; - FX_BOOL bFirstDigit = TRUE; + bool bFirst = true; for (i = 0; i < src_size; i++) { uint8_t ch = src_buf[i]; if (PDFCharIsLineEnding(ch) || ch == ' ' || ch == '\t') continue; - int digit; - if (ch <= '9' && ch >= '0') { - digit = ch - '0'; - } else if (ch <= 'f' && ch >= 'a') { - digit = ch - 'a' + 10; - } else if (ch <= 'F' && ch >= 'A') { - digit = ch - 'A' + 10; - } else if (ch == '>') { - i++; + if (ch == '>') { + ++i; break; - } else { - continue; } - if (bFirstDigit) { + if (!std::isxdigit(ch)) + continue; + + int digit = FXSYS_toHexDigit(ch); + if (bFirst) dest_buf[dest_size] = digit * 16; - } else { + else dest_buf[dest_size++] += digit; - } - bFirstDigit = !bFirstDigit; + + bFirst = !bFirst; } - if (!bFirstDigit) { + if (!bFirst) dest_size++; - } return i; } + FX_DWORD RunLengthDecode(const uint8_t* src_buf, FX_DWORD src_size, uint8_t*& dest_buf, |