diff options
-rw-r--r-- | BUILD.gn | 1 | ||||
-rw-r--r-- | core/src/fpdfapi/fpdf_page/fpdf_page_parser_old_unittest.cpp | 48 | ||||
-rw-r--r-- | core/src/fpdfapi/fpdf_page/pageint.h | 6 | ||||
-rw-r--r-- | pdfium.gyp | 1 |
4 files changed, 56 insertions, 0 deletions
@@ -716,6 +716,7 @@ test("pdfium_unittests") { sources = [ "core/src/fpdfapi/fpdf_font/fpdf_font_cid_unittest.cpp", "core/src/fpdfapi/fpdf_font/fpdf_font_unittest.cpp", + "core/src/fpdfapi/fpdf_page/fpdf_page_parser_old_unittest.cpp", "core/src/fpdfapi/fpdf_parser/fpdf_parser_decode_unittest.cpp", "core/src/fxcodec/codec/fx_codec_jpx_unittest.cpp", "core/src/fxcrt/fx_basic_bstring_unittest.cpp", diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_parser_old_unittest.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_parser_old_unittest.cpp new file mode 100644 index 0000000000..3fc012f29c --- /dev/null +++ b/core/src/fpdfapi/fpdf_page/fpdf_page_parser_old_unittest.cpp @@ -0,0 +1,48 @@ +// Copyright 2015 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "testing/gtest/include/gtest/gtest.h" + +#include "pageint.h" + +TEST(fpdf_page_parser_old, ReadHexString) { + { + // Position out of bounds. + uint8_t data[] = "12ab>"; + CPDF_StreamParser parser(data, 5); + parser.SetPos(6); + EXPECT_EQ("", parser.ReadHexString()); + } + + { + // Regular conversion. + uint8_t data[] = "1A2b>abcd"; + CPDF_StreamParser parser(data, 5); + EXPECT_EQ("\x1a\x2b", parser.ReadHexString()); + EXPECT_EQ(5, parser.GetPos()); + } + + { + // Missing ending > + uint8_t data[] = "1A2b"; + CPDF_StreamParser parser(data, 5); + EXPECT_EQ("\x1a\x2b", parser.ReadHexString()); + EXPECT_EQ(5, parser.GetPos()); + } + + { + // Uneven number of bytes. + uint8_t data[] = "1A2>asdf"; + CPDF_StreamParser parser(data, 5); + EXPECT_EQ("\x1a\x20", parser.ReadHexString()); + EXPECT_EQ(4, parser.GetPos()); + } + + { + uint8_t data[] = ">"; + CPDF_StreamParser parser(data, 5); + EXPECT_EQ("", parser.ReadHexString()); + EXPECT_EQ(1, parser.GetPos()); + } +} diff --git a/core/src/fpdfapi/fpdf_page/pageint.h b/core/src/fpdfapi/fpdf_page/pageint.h index 1b41633346..e787d6973a 100644 --- a/core/src/fpdfapi/fpdf_page/pageint.h +++ b/core/src/fpdfapi/fpdf_page/pageint.h @@ -10,8 +10,12 @@ #include <map> #include "../../../../third_party/base/nonstd_unique_ptr.h" +#include "../../../include/fpdfapi/fpdf_page.h" #include "../../../include/fpdfapi/fpdf_pageobj.h" +class CPDF_AllStates; +class CPDF_ParseOptions; + #define PARSE_STEP_LIMIT 100 class CPDF_StreamParser { @@ -41,6 +45,8 @@ class CPDF_StreamParser { void SkipPathObject(); protected: + friend class fpdf_page_parser_old_ReadHexString_Test; + void GetNextWord(FX_BOOL& bIsNumber); CFX_ByteString ReadString(); CFX_ByteString ReadHexString(); diff --git a/pdfium.gyp b/pdfium.gyp index 7c8c02e4da..8687e76cac 100644 --- a/pdfium.gyp +++ b/pdfium.gyp @@ -716,6 +716,7 @@ 'sources': [ 'core/src/fpdfapi/fpdf_font/fpdf_font_cid_unittest.cpp', 'core/src/fpdfapi/fpdf_font/fpdf_font_unittest.cpp', + 'core/src/fpdfapi/fpdf_page/fpdf_page_parser_old_unittest.cpp', 'core/src/fpdfapi/fpdf_parser/fpdf_parser_decode_unittest.cpp', 'core/src/fxcodec/codec/fx_codec_jpx_unittest.cpp', 'core/src/fxcrt/fx_basic_bstring_unittest.cpp', |