diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/fpdfapi/parser/cpdf_simple_parser_unittest.cpp | 12 | ||||
-rw-r--r-- | core/fpdfapi/parser/cpdf_syntax_parser.cpp | 7 | ||||
-rw-r--r-- | core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp | 30 | ||||
-rw-r--r-- | core/fpdfdoc/cpdf_filespec_unittest.cpp | 25 |
4 files changed, 42 insertions, 32 deletions
diff --git a/core/fpdfapi/parser/cpdf_simple_parser_unittest.cpp b/core/fpdfapi/parser/cpdf_simple_parser_unittest.cpp index a2f43386e7..e8d3b7142a 100644 --- a/core/fpdfapi/parser/cpdf_simple_parser_unittest.cpp +++ b/core/fpdfapi/parser/cpdf_simple_parser_unittest.cpp @@ -11,7 +11,7 @@ #include "testing/test_support.h" TEST(SimpleParserTest, GetWord) { - pdfium::StrFuncTestData test_data[] = { + static const pdfium::StrFuncTestData test_data[] = { // Empty src string. STR_IN_OUT_CASE("", ""), // Content with whitespaces only. @@ -51,15 +51,17 @@ TEST(SimpleParserTest, GetWord) { const pdfium::StrFuncTestData& data = test_data[i]; CPDF_SimpleParser parser(data.input, data.input_size); ByteStringView word = parser.GetWord(); - EXPECT_EQ(std::string(reinterpret_cast<const char*>(data.expected), - data.expected_size), - std::string(word.unterminated_c_str(), word.GetLength())) + EXPECT_EQ(data.expected_size, word.GetLength()) << " for case " << i; + if (data.expected_size != word.GetLength()) + continue; + EXPECT_EQ( + 0, memcmp(data.expected, word.unterminated_c_str(), data.expected_size)) << " for case " << i; } } TEST(SimpleParserTest, FindTagParamFromStart) { - struct FindTagTestStruct { + static const struct FindTagTestStruct { const unsigned char* input; unsigned int input_size; const char* token; diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.cpp b/core/fpdfapi/parser/cpdf_syntax_parser.cpp index f0ea5ac5b0..ddf420b34a 100644 --- a/core/fpdfapi/parser/cpdf_syntax_parser.cpp +++ b/core/fpdfapi/parser/cpdf_syntax_parser.cpp @@ -337,9 +337,10 @@ void CPDF_SyntaxParser::ToNextWord() { ByteString CPDF_SyntaxParser::GetNextWord(bool* bIsNumber) { const CPDF_ReadValidator::Session read_session(GetValidator().Get()); GetNextWordInternal(bIsNumber); - return GetValidator()->has_read_problems() - ? ByteString() - : ByteString((const char*)m_WordBuffer, m_WordSize); + ByteString ret; + if (!GetValidator()->has_read_problems()) + ret = ByteString(m_WordBuffer, m_WordSize); + return ret; } ByteString CPDF_SyntaxParser::PeekNextWord(bool* bIsNumber) { diff --git a/core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp b/core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp index bf2fd6d10f..e95a4cc595 100644 --- a/core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp +++ b/core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp @@ -11,13 +11,13 @@ #include "testing/gtest/include/gtest/gtest.h" #include "testing/test_support.h" -class FPDFParserDecodeEmbeddertest : public EmbedderTest {}; +using FPDFParserDecodeEmbeddertest = EmbedderTest; // NOTE: python's zlib.compress() and zlib.decompress() may be useful for // external validation of the FlateEncode/FlateDecode test cases. TEST_F(FPDFParserDecodeEmbeddertest, FlateEncode) { - pdfium::StrFuncTestData flate_encode_cases[] = { + static const pdfium::StrFuncTestData flate_encode_cases[] = { STR_IN_OUT_CASE("", "\x78\x9c\x03\x00\x00\x00\x00\x01"), STR_IN_OUT_CASE(" ", "\x78\x9c\x53\x00\x00\x00\x21\x00\x21"), STR_IN_OUT_CASE("123", "\x78\x9c\x33\x34\x32\x06\x00\01\x2d\x00\x97"), @@ -37,18 +37,20 @@ TEST_F(FPDFParserDecodeEmbeddertest, FlateEncode) { for (size_t i = 0; i < FX_ArraySize(flate_encode_cases); ++i) { const pdfium::StrFuncTestData& data = flate_encode_cases[i]; unsigned char* buf = nullptr; - unsigned int buf_size; + uint32_t buf_size; EXPECT_TRUE(FlateEncode(data.input, data.input_size, &buf, &buf_size)); ASSERT_TRUE(buf); - EXPECT_EQ(std::string((const char*)data.expected, data.expected_size), - std::string((const char*)buf, buf_size)) + EXPECT_EQ(data.expected_size, buf_size) << " for case " << i; + if (data.expected_size != buf_size) + continue; + EXPECT_EQ(0, memcmp(data.expected, buf, data.expected_size)) << " for case " << i; FX_Free(buf); } } TEST_F(FPDFParserDecodeEmbeddertest, FlateDecode) { - pdfium::DecodeTestData flate_decode_cases[] = { + static const pdfium::DecodeTestData flate_decode_cases[] = { STR_IN_OUT_CASE("", "", 0), STR_IN_OUT_CASE("preposterous nonsense", "", 2), STR_IN_OUT_CASE("\x78\x9c\x03\x00\x00\x00\x00\x01", "", 8), @@ -71,16 +73,18 @@ TEST_F(FPDFParserDecodeEmbeddertest, FlateDecode) { for (size_t i = 0; i < FX_ArraySize(flate_decode_cases); ++i) { const pdfium::DecodeTestData& data = flate_decode_cases[i]; - unsigned char* result = nullptr; - unsigned int result_size; + unsigned char* buf = nullptr; + uint32_t buf_size; EXPECT_EQ(data.processed_size, - FlateDecode(data.input, data.input_size, &result, &result_size)) + FlateDecode(data.input, data.input_size, &buf, &buf_size)) << " for case " << i; - ASSERT_TRUE(result); - EXPECT_EQ(std::string((const char*)data.expected, data.expected_size), - std::string((const char*)result, result_size)) + ASSERT_TRUE(buf); + EXPECT_EQ(data.expected_size, buf_size) << " for case " << i; + if (data.expected_size != buf_size) + continue; + EXPECT_EQ(0, memcmp(data.expected, buf, data.expected_size)) << " for case " << i; - FX_Free(result); + FX_Free(buf); } } diff --git a/core/fpdfdoc/cpdf_filespec_unittest.cpp b/core/fpdfdoc/cpdf_filespec_unittest.cpp index 5537473e2c..73fc8a4ae8 100644 --- a/core/fpdfdoc/cpdf_filespec_unittest.cpp +++ b/core/fpdfdoc/cpdf_filespec_unittest.cpp @@ -17,7 +17,7 @@ #include "third_party/base/ptr_util.h" TEST(cpdf_filespec, EncodeDecodeFileName) { - std::vector<pdfium::NullTermWstrFuncTestData> test_data = { + static const std::vector<pdfium::NullTermWstrFuncTestData> test_data = { // Empty src string. {L"", L""}, // only file name. @@ -59,7 +59,7 @@ TEST(cpdf_filespec, EncodeDecodeFileName) { TEST(cpdf_filespec, GetFileName) { { // String object. - pdfium::NullTermWstrFuncTestData test_data = { + static const pdfium::NullTermWstrFuncTestData test_data = { #if _FX_PLATFORM_ == _FX_PLATFORM_WINDOWS_ L"/C/docs/test.pdf", L"C:\\docs\\test.pdf" @@ -77,7 +77,7 @@ TEST(cpdf_filespec, GetFileName) { } { // Dictionary object. - pdfium::NullTermWstrFuncTestData test_data[5] = { + static const pdfium::NullTermWstrFuncTestData test_data[] = { #if _FX_PLATFORM_ == _FX_PLATFORM_WINDOWS_ {L"/C/docs/test.pdf", L"C:\\docs\\test.pdf"}, {L"/D/docs/test.pdf", L"D:\\docs\\test.pdf"}, @@ -99,11 +99,13 @@ TEST(cpdf_filespec, GetFileName) { #endif }; // Keyword fields in reverse order of precedence to retrieve the file name. - const char* const keywords[5] = {"Unix", "Mac", "DOS", "F", "UF"}; + const char* const keywords[] = {"Unix", "Mac", "DOS", "F", "UF"}; + static_assert(FX_ArraySize(test_data) == FX_ArraySize(keywords), + "size mismatch"); auto dict_obj = pdfium::MakeUnique<CPDF_Dictionary>(); CPDF_FileSpec file_spec(dict_obj.get()); EXPECT_TRUE(file_spec.GetFileName().IsEmpty()); - for (int i = 0; i < 5; ++i) { + for (size_t i = 0; i < FX_ArraySize(keywords); ++i) { dict_obj->SetNewFor<CPDF_String>(keywords[i], test_data[i].input); EXPECT_STREQ(test_data[i].expected, file_spec.GetFileName().c_str()); } @@ -122,7 +124,7 @@ TEST(cpdf_filespec, GetFileName) { } TEST(cpdf_filespec, SetFileName) { - pdfium::NullTermWstrFuncTestData test_data = { + static const pdfium::NullTermWstrFuncTestData test_data = { #if _FX_PLATFORM_ == _FX_PLATFORM_WINDOWS_ L"C:\\docs\\test.pdf", L"/C/docs/test.pdf" @@ -180,9 +182,10 @@ TEST(cpdf_filespec, GetFileStream) { dict_obj->SetNewFor<CPDF_Dictionary>("EF"); CPDF_FileSpec file_spec(dict_obj.get()); - const char* const keys[5] = {"Unix", "Mac", "DOS", "F", "UF"}; const wchar_t file_name[] = L"test.pdf"; - const char* const stream[5] = {"test1", "test2", "test3", "test4", "test5"}; + const char* const keys[] = {"Unix", "Mac", "DOS", "F", "UF"}; + const char* const streams[] = {"test1", "test2", "test3", "test4", "test5"}; + static_assert(FX_ArraySize(keys) == FX_ArraySize(streams), "size mismatch"); CPDF_Dictionary* file_dict = file_spec.GetObj()->AsDictionary()->GetDictFor("EF"); @@ -193,15 +196,15 @@ TEST(cpdf_filespec, GetFileStream) { // Set the file stream. auto pDict = pdfium::MakeUnique<CPDF_Dictionary>(); - size_t buf_len = strlen(stream[i]) + 1; + size_t buf_len = strlen(streams[i]) + 1; std::unique_ptr<uint8_t, FxFreeDeleter> buf(FX_Alloc(uint8_t, buf_len)); - memcpy(buf.get(), stream[i], buf_len); + memcpy(buf.get(), streams[i], buf_len); file_dict->SetNewFor<CPDF_Stream>(keys[i], std::move(buf), buf_len, std::move(pDict)); // Check that the file content stream is as expected. EXPECT_STREQ( - stream[i], + streams[i], file_spec.GetFileStream()->GetUnicodeText().UTF8Encode().c_str()); if (i == 2) { |