From cef665eb28bbf4caaa5625332be8f891e3ec2a8e Mon Sep 17 00:00:00 2001 From: Ryan Harrison Date: Wed, 2 May 2018 19:02:37 +0000 Subject: Convert hand rolled buffer reader in CFX_MemoryStream BUG=pdfium:1007 Change-Id: Ib8aecf2e4833f22a4288f6e1381edc11d114c865 Reviewed-on: https://pdfium-review.googlesource.com/31952 Commit-Queue: Ryan Harrison Reviewed-by: Henrique Nakashima --- core/fxcodec/gif/cfx_gifcontext_unittest.cpp | 145 +++++++++++++-------------- 1 file changed, 68 insertions(+), 77 deletions(-) (limited to 'core/fxcodec/gif/cfx_gifcontext_unittest.cpp') diff --git a/core/fxcodec/gif/cfx_gifcontext_unittest.cpp b/core/fxcodec/gif/cfx_gifcontext_unittest.cpp index c5d3ac90c7..20aa6913d0 100644 --- a/core/fxcodec/gif/cfx_gifcontext_unittest.cpp +++ b/core/fxcodec/gif/cfx_gifcontext_unittest.cpp @@ -17,93 +17,76 @@ class CFX_GifContextForTest : public CFX_GifContext { using CFX_GifContext::ReadData; using CFX_GifContext::ReadGifSignature; using CFX_GifContext::ReadLogicalScreenDescriptor; + + CFX_MemoryStream* InputBuffer() const { return input_buffer_.Get(); } }; TEST(CFX_GifContext, SetInputBuffer) { CFX_GifContextForTest context(nullptr, nullptr); context.SetInputBuffer(nullptr, 0); - EXPECT_EQ(nullptr, context.next_in_); - EXPECT_EQ(0u, context.avail_in_); - EXPECT_EQ(0u, context.skip_size_); + EXPECT_EQ(nullptr, context.InputBuffer()->GetBuffer()); + EXPECT_EQ(0, context.InputBuffer()->GetSize()); + EXPECT_EQ(0, context.InputBuffer()->GetPosition()); context.SetInputBuffer(nullptr, 100); - EXPECT_EQ(nullptr, context.next_in_); - EXPECT_EQ(100u, context.avail_in_); - EXPECT_EQ(0u, context.skip_size_); + EXPECT_EQ(nullptr, context.InputBuffer()->GetBuffer()); + EXPECT_EQ(100, context.InputBuffer()->GetSize()); + EXPECT_EQ(0, context.InputBuffer()->GetPosition()); uint8_t buffer[] = {0x00, 0x01, 0x02}; context.SetInputBuffer(buffer, 0); - EXPECT_EQ(buffer, context.next_in_); - EXPECT_EQ(0u, context.avail_in_); - EXPECT_EQ(0u, context.skip_size_); + EXPECT_EQ(buffer, context.InputBuffer()->GetBuffer()); + EXPECT_EQ(0, context.InputBuffer()->GetSize()); + EXPECT_EQ(0, context.InputBuffer()->GetPosition()); context.SetInputBuffer(buffer, 3); - EXPECT_EQ(buffer, context.next_in_); - EXPECT_EQ(3u, context.avail_in_); - EXPECT_EQ(0u, context.skip_size_); + EXPECT_EQ(buffer, context.InputBuffer()->GetBuffer()); + EXPECT_EQ(3, context.InputBuffer()->GetSize()); + EXPECT_EQ(0, context.InputBuffer()->GetPosition()); context.SetInputBuffer(buffer, 100); - EXPECT_EQ(buffer, context.next_in_); - EXPECT_EQ(100u, context.avail_in_); - EXPECT_EQ(0u, context.skip_size_); + EXPECT_EQ(buffer, context.InputBuffer()->GetBuffer()); + EXPECT_EQ(100, context.InputBuffer()->GetSize()); + EXPECT_EQ(0, context.InputBuffer()->GetPosition()); } TEST(CFX_GifContext, ReadData) { CFX_GifContextForTest context(nullptr, nullptr); context.SetInputBuffer(nullptr, 0); - EXPECT_EQ(nullptr, context.ReadData(nullptr, 0)); - EXPECT_EQ(nullptr, context.ReadData(nullptr, 10)); + EXPECT_FALSE(context.ReadData(nullptr, 0)); + EXPECT_FALSE(context.ReadData(nullptr, 10)); - uint8_t* dest_buffer = nullptr; - EXPECT_EQ(nullptr, - context.ReadData(reinterpret_cast(&dest_buffer), 0)); - EXPECT_EQ(nullptr, - context.ReadData(reinterpret_cast(&dest_buffer), 10)); + std::vector dest_buffer; + EXPECT_FALSE(context.ReadData(dest_buffer.data(), 0)); + EXPECT_FALSE(context.ReadData(dest_buffer.data(), 10)); uint8_t src_buffer[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09}; context.SetInputBuffer(src_buffer, 0); - EXPECT_EQ(nullptr, - context.ReadData(reinterpret_cast(&dest_buffer), 10)); - EXPECT_EQ(reinterpret_cast(src_buffer), context.next_in_); - EXPECT_EQ(0u, context.avail_in_); - EXPECT_EQ(0u, context.skip_size_); - - dest_buffer = nullptr; - context.SetInputBuffer(src_buffer, 10); - EXPECT_EQ(src_buffer, - context.ReadData(reinterpret_cast(&dest_buffer), 10)); - EXPECT_EQ(reinterpret_cast(src_buffer), dest_buffer); - EXPECT_EQ(src_buffer, context.next_in_); - EXPECT_EQ(10u, context.avail_in_); - EXPECT_EQ(10u, context.skip_size_); - - dest_buffer = nullptr; - context.SetInputBuffer(src_buffer, 10); - EXPECT_EQ(src_buffer, - context.ReadData(reinterpret_cast(&dest_buffer), 5)); - EXPECT_EQ(reinterpret_cast(src_buffer), dest_buffer); - EXPECT_EQ(src_buffer, context.next_in_); - EXPECT_EQ(10u, context.avail_in_); - EXPECT_EQ(5u, context.skip_size_); - - dest_buffer = nullptr; - EXPECT_EQ(src_buffer + 5, - context.ReadData(reinterpret_cast(&dest_buffer), 5)); - EXPECT_EQ(reinterpret_cast(src_buffer + 5), dest_buffer); - EXPECT_EQ(src_buffer, context.next_in_); - EXPECT_EQ(10u, context.avail_in_); - EXPECT_EQ(10u, context.skip_size_); - - dest_buffer = nullptr; - EXPECT_EQ(nullptr, - context.ReadData(reinterpret_cast(&dest_buffer), 5)); - EXPECT_EQ(nullptr, dest_buffer); - EXPECT_EQ(src_buffer, context.next_in_); - EXPECT_EQ(10u, context.avail_in_); - EXPECT_EQ(10u, context.skip_size_); + dest_buffer.resize(sizeof(src_buffer)); + EXPECT_FALSE(context.ReadData(dest_buffer.data(), sizeof(src_buffer))); + + context.SetInputBuffer(src_buffer, 1); + EXPECT_FALSE(context.ReadData(dest_buffer.data(), sizeof(src_buffer))); + EXPECT_EQ(0, context.InputBuffer()->GetPosition()); + EXPECT_FALSE(context.ReadData(nullptr, sizeof(src_buffer))); + EXPECT_FALSE(context.ReadData(nullptr, 1)); + EXPECT_TRUE(context.ReadData(dest_buffer.data(), 1)); + EXPECT_EQ(src_buffer[0], dest_buffer[0]); + + context.SetInputBuffer(src_buffer, sizeof(src_buffer)); + EXPECT_FALSE(context.ReadData(nullptr, sizeof(src_buffer))); + EXPECT_TRUE(context.ReadData(dest_buffer.data(), sizeof(src_buffer))); + for (size_t i = 0; i < sizeof(src_buffer); i++) + EXPECT_EQ(src_buffer[i], dest_buffer[i]); + + context.SetInputBuffer(src_buffer, sizeof(src_buffer)); + for (size_t i = 0; i < sizeof(src_buffer); i++) { + EXPECT_TRUE(context.ReadData(dest_buffer.data(), 1)); + EXPECT_EQ(src_buffer[i], dest_buffer[0]); + } } TEST(CFX_GifContext, ReadGifSignature) { @@ -113,48 +96,48 @@ TEST(CFX_GifContext, ReadGifSignature) { uint8_t data[1]; context.SetInputBuffer(data, 0); EXPECT_EQ(CFX_GifDecodeStatus::Unfinished, context.ReadGifSignature()); - EXPECT_EQ(0u, context.skip_size_); + EXPECT_EQ(0, context.InputBuffer()->GetPosition()); } // Make sure testing the entire signature { uint8_t data[] = {'G', 'I', 'F'}; context.SetInputBuffer(data, sizeof(data)); EXPECT_EQ(CFX_GifDecodeStatus::Unfinished, context.ReadGifSignature()); - EXPECT_EQ(0u, context.skip_size_); + EXPECT_EQ(0, context.InputBuffer()->GetPosition()); } { uint8_t data[] = {'N', 'O', 'T', 'G', 'I', 'F'}; context.SetInputBuffer(data, sizeof(data)); EXPECT_EQ(CFX_GifDecodeStatus::Error, context.ReadGifSignature()); - EXPECT_EQ(6u, context.skip_size_); + EXPECT_EQ(6, context.InputBuffer()->GetPosition()); } // Make sure not matching GIF8*a { uint8_t data[] = {'G', 'I', 'F', '8', '0', 'a'}; context.SetInputBuffer(data, sizeof(data)); EXPECT_EQ(CFX_GifDecodeStatus::Error, context.ReadGifSignature()); - EXPECT_EQ(6u, context.skip_size_); + EXPECT_EQ(6, context.InputBuffer()->GetPosition()); } // Make sure not matching GIF**a { uint8_t data[] = {'G', 'I', 'F', '9', '2', 'a'}; context.SetInputBuffer(data, sizeof(data)); EXPECT_EQ(CFX_GifDecodeStatus::Error, context.ReadGifSignature()); - EXPECT_EQ(6u, context.skip_size_); + EXPECT_EQ(6, context.InputBuffer()->GetPosition()); } // One valid signature { uint8_t data[] = {'G', 'I', 'F', '8', '7', 'a'}; context.SetInputBuffer(data, sizeof(data)); EXPECT_EQ(CFX_GifDecodeStatus::Success, context.ReadGifSignature()); - EXPECT_EQ(6u, context.skip_size_); + EXPECT_EQ(6, context.InputBuffer()->GetPosition()); } // The other valid signature { uint8_t data[] = {'G', 'I', 'F', '8', '9', 'a'}; context.SetInputBuffer(data, sizeof(data)); EXPECT_EQ(CFX_GifDecodeStatus::Success, context.ReadGifSignature()); - EXPECT_EQ(6u, context.skip_size_); + EXPECT_EQ(6, context.InputBuffer()->GetPosition()); } } @@ -175,7 +158,8 @@ TEST(CFX_GifContext, ReadLocalScreenDescriptor) { EXPECT_EQ(CFX_GifDecodeStatus::Success, context.ReadLogicalScreenDescriptor()); - EXPECT_EQ(sizeof(CFX_GifLocalScreenDescriptor), context.skip_size_); + EXPECT_EQ(sizeof(CFX_GifLocalScreenDescriptor), + static_cast(context.InputBuffer()->GetPosition())); EXPECT_EQ(0, context.width_); EXPECT_EQ(0, context.height_); EXPECT_EQ(0u, context.bc_index_); @@ -190,7 +174,8 @@ TEST(CFX_GifContext, ReadLocalScreenDescriptor) { EXPECT_EQ(CFX_GifDecodeStatus::Success, context.ReadLogicalScreenDescriptor()); - EXPECT_EQ(sizeof(CFX_GifLocalScreenDescriptor), context.skip_size_); + EXPECT_EQ(sizeof(CFX_GifLocalScreenDescriptor), + static_cast(context.InputBuffer()->GetPosition())); EXPECT_EQ(0x000A, context.width_); EXPECT_EQ(0x0F00, context.height_); EXPECT_EQ(0u, context.bc_index_); // bc_index_ is 0 if no global palette @@ -205,7 +190,7 @@ TEST(CFX_GifContext, ReadLocalScreenDescriptor) { EXPECT_EQ(CFX_GifDecodeStatus::Unfinished, context.ReadLogicalScreenDescriptor()); - EXPECT_EQ(0u, context.skip_size_); + EXPECT_EQ(0, context.InputBuffer()->GetPosition()); } // LSD with global palette { @@ -219,7 +204,8 @@ TEST(CFX_GifContext, ReadLocalScreenDescriptor) { EXPECT_EQ(CFX_GifDecodeStatus::Success, context.ReadLogicalScreenDescriptor()); - EXPECT_EQ(sizeof(data), context.skip_size_); + EXPECT_EQ(sizeof(data), + static_cast(context.InputBuffer()->GetPosition())); EXPECT_EQ(0x000A, context.width_); EXPECT_EQ(0x0F00, context.height_); EXPECT_EQ(1u, context.bc_index_); @@ -246,7 +232,8 @@ TEST(CFX_GifContext, ReadHeader) { EXPECT_EQ(CFX_GifDecodeStatus::Error, context.ReadHeader()); - EXPECT_EQ(sizeof(data.signature), context.skip_size_); + EXPECT_EQ(sizeof(data.signature), + static_cast(context.InputBuffer()->GetPosition())); } // Short after signature { @@ -256,7 +243,8 @@ TEST(CFX_GifContext, ReadHeader) { EXPECT_EQ(CFX_GifDecodeStatus::Unfinished, context.ReadHeader()); - EXPECT_EQ(sizeof(signature), context.skip_size_); + EXPECT_EQ(sizeof(signature), + static_cast(context.InputBuffer()->GetPosition())); } // Success without global palette { @@ -269,7 +257,8 @@ TEST(CFX_GifContext, ReadHeader) { EXPECT_EQ(CFX_GifDecodeStatus::Success, context.ReadHeader()); - EXPECT_EQ(sizeof(data), context.skip_size_); + EXPECT_EQ(sizeof(data), + static_cast(context.InputBuffer()->GetPosition())); EXPECT_EQ(0x000A, context.width_); EXPECT_EQ(0x0F00, context.height_); EXPECT_EQ(0u, context.bc_index_); // bc_index_ is 0 if no global palette @@ -286,7 +275,8 @@ TEST(CFX_GifContext, ReadHeader) { EXPECT_EQ(CFX_GifDecodeStatus::Unfinished, context.ReadHeader()); - EXPECT_EQ(sizeof(data.signature), context.skip_size_); + EXPECT_EQ(sizeof(data.signature), + static_cast(context.InputBuffer()->GetPosition())); } // Success with global palette { @@ -301,7 +291,8 @@ TEST(CFX_GifContext, ReadHeader) { EXPECT_EQ(CFX_GifDecodeStatus::Success, context.ReadHeader()); - EXPECT_EQ(sizeof(data), context.skip_size_); + EXPECT_EQ(sizeof(data), + static_cast(context.InputBuffer()->GetPosition())); EXPECT_EQ(0x000A, context.width_); EXPECT_EQ(0x0F00, context.height_); EXPECT_EQ(1u, context.bc_index_); -- cgit v1.2.3