From 3e838a75ae5c0bb0e524f745df69e54a021fc5ec Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Tue, 9 Oct 2018 19:44:11 +0000 Subject: Pass CFX_CodecMemory in place of spans to codecs. Next step towards making CFX_CodecMemory own the memory it is ref-counting. Change-Id: I5922d80d13032c3ea028447c47d34a10234109a3 Reviewed-on: https://pdfium-review.googlesource.com/c/43630 Reviewed-by: Lei Zhang Commit-Queue: Tom Sepez --- core/fxcodec/bmp/cfx_bmpdecompressor.cpp | 6 +- core/fxcodec/bmp/cfx_bmpdecompressor.h | 2 +- core/fxcodec/codec/ccodec_bmpmodule.cpp | 7 +- core/fxcodec/codec/ccodec_bmpmodule.h | 2 +- core/fxcodec/codec/ccodec_gifmodule.cpp | 5 +- core/fxcodec/codec/ccodec_gifmodule.h | 2 +- core/fxcodec/codec/ccodec_jpegmodule.cpp | 3 +- core/fxcodec/codec/ccodec_jpegmodule.h | 2 +- core/fxcodec/codec/ccodec_pngmodule.cpp | 3 +- core/fxcodec/codec/ccodec_pngmodule.h | 2 +- core/fxcodec/codec/ccodec_progressivedecoder.cpp | 40 +++++++--- core/fxcodec/codec/ccodec_tiffmodule.cpp | 2 +- core/fxcodec/codec/ccodec_tiffmodule.h | 2 +- core/fxcodec/codec/cfx_codec_memory.h | 1 + core/fxcodec/codec/codec_module_iface.h | 3 +- core/fxcodec/gif/cfx_gifcontext.cpp | 4 +- core/fxcodec/gif/cfx_gifcontext.h | 2 +- core/fxcodec/gif/cfx_gifcontext_unittest.cpp | 96 +++++++++++++----------- 18 files changed, 111 insertions(+), 73 deletions(-) diff --git a/core/fxcodec/bmp/cfx_bmpdecompressor.cpp b/core/fxcodec/bmp/cfx_bmpdecompressor.cpp index de97c6d527..35b76f2343 100644 --- a/core/fxcodec/bmp/cfx_bmpdecompressor.cpp +++ b/core/fxcodec/bmp/cfx_bmpdecompressor.cpp @@ -8,6 +8,7 @@ #include #include +#include #include "core/fxcodec/bmp/cfx_bmpcontext.h" #include "core/fxcrt/fx_safe_types.h" @@ -659,8 +660,9 @@ void CFX_BmpDecompressor::SaveDecodingStatus(int32_t status) { decode_status_ = status; } -void CFX_BmpDecompressor::SetInputBuffer(pdfium::span src_buf) { - input_buffer_ = pdfium::MakeRetain(src_buf); +void CFX_BmpDecompressor::SetInputBuffer( + RetainPtr codec_memory) { + input_buffer_ = std::move(codec_memory); } FX_FILESIZE CFX_BmpDecompressor::GetAvailInput() const { diff --git a/core/fxcodec/bmp/cfx_bmpdecompressor.h b/core/fxcodec/bmp/cfx_bmpdecompressor.h index beaf9bf78a..53d52ae14c 100644 --- a/core/fxcodec/bmp/cfx_bmpdecompressor.h +++ b/core/fxcodec/bmp/cfx_bmpdecompressor.h @@ -25,7 +25,7 @@ class CFX_BmpDecompressor { void Error(); int32_t DecodeImage(); int32_t ReadHeader(); - void SetInputBuffer(pdfium::span src_buf); + void SetInputBuffer(RetainPtr codec_memory); FX_FILESIZE GetAvailInput() const; jmp_buf jmpbuf_; diff --git a/core/fxcodec/codec/ccodec_bmpmodule.cpp b/core/fxcodec/codec/ccodec_bmpmodule.cpp index 9884662bd3..37a0b2cb29 100644 --- a/core/fxcodec/codec/ccodec_bmpmodule.cpp +++ b/core/fxcodec/codec/ccodec_bmpmodule.cpp @@ -6,6 +6,8 @@ #include "core/fxcodec/codec/ccodec_bmpmodule.h" +#include + #include "core/fxcodec/bmp/cfx_bmpcontext.h" #include "core/fxcodec/codec/codec_int.h" #include "core/fxcodec/fx_codec.h" @@ -68,8 +70,9 @@ FX_FILESIZE CCodec_BmpModule::GetAvailInput(Context* pContext) const { } bool CCodec_BmpModule::Input(Context* pContext, - pdfium::span src_buf, + RetainPtr codec_memory, CFX_DIBAttribute*) { - static_cast(pContext)->m_Bmp.SetInputBuffer(src_buf); + auto* ctx = static_cast(pContext); + ctx->m_Bmp.SetInputBuffer(std::move(codec_memory)); return true; } diff --git a/core/fxcodec/codec/ccodec_bmpmodule.h b/core/fxcodec/codec/ccodec_bmpmodule.h index d5b6a75494..f8a82727bc 100644 --- a/core/fxcodec/codec/ccodec_bmpmodule.h +++ b/core/fxcodec/codec/ccodec_bmpmodule.h @@ -32,7 +32,7 @@ class CCodec_BmpModule final : public CodecModuleIface { // CodecModuleIface: FX_FILESIZE GetAvailInput(Context* pContext) const override; bool Input(Context* pContext, - pdfium::span src_buf, + RetainPtr codec_memory, CFX_DIBAttribute* pAttribute) override; std::unique_ptr Start(Delegate* pDelegate); diff --git a/core/fxcodec/codec/ccodec_gifmodule.cpp b/core/fxcodec/codec/ccodec_gifmodule.cpp index 289993c903..4162171827 100644 --- a/core/fxcodec/codec/ccodec_gifmodule.cpp +++ b/core/fxcodec/codec/ccodec_gifmodule.cpp @@ -71,8 +71,9 @@ FX_FILESIZE CCodec_GifModule::GetAvailInput(Context* pContext) const { } bool CCodec_GifModule::Input(Context* pContext, - pdfium::span src_buf, + RetainPtr codec_memory, CFX_DIBAttribute*) { - static_cast(pContext)->SetInputBuffer(src_buf); + auto* ctx = static_cast(pContext); + ctx->SetInputBuffer(std::move(codec_memory)); return true; } diff --git a/core/fxcodec/codec/ccodec_gifmodule.h b/core/fxcodec/codec/ccodec_gifmodule.h index 665208ba1a..0e85998dc3 100644 --- a/core/fxcodec/codec/ccodec_gifmodule.h +++ b/core/fxcodec/codec/ccodec_gifmodule.h @@ -41,7 +41,7 @@ class CCodec_GifModule final : public CodecModuleIface { // CodecModuleIface: FX_FILESIZE GetAvailInput(Context* context) const override; bool Input(Context* context, - pdfium::span src_buf, + RetainPtr codec_memory, CFX_DIBAttribute* pAttribute) override; std::unique_ptr Start(Delegate* pDelegate); diff --git a/core/fxcodec/codec/ccodec_jpegmodule.cpp b/core/fxcodec/codec/ccodec_jpegmodule.cpp index 7c15aa35a0..4a6059ad18 100644 --- a/core/fxcodec/codec/ccodec_jpegmodule.cpp +++ b/core/fxcodec/codec/ccodec_jpegmodule.cpp @@ -413,8 +413,9 @@ std::unique_ptr CCodec_JpegModule::Start() { } bool CCodec_JpegModule::Input(Context* pContext, - pdfium::span src_buf, + RetainPtr codec_memory, CFX_DIBAttribute*) { + pdfium::span src_buf = codec_memory->GetSpan(); auto* ctx = static_cast(pContext); if (ctx->m_SkipSize) { if (ctx->m_SkipSize > src_buf.size()) { diff --git a/core/fxcodec/codec/ccodec_jpegmodule.h b/core/fxcodec/codec/ccodec_jpegmodule.h index 45b1d1b6d1..258038f9cd 100644 --- a/core/fxcodec/codec/ccodec_jpegmodule.h +++ b/core/fxcodec/codec/ccodec_jpegmodule.h @@ -31,7 +31,7 @@ class CCodec_JpegModule final : public CodecModuleIface { // CodecModuleIface: FX_FILESIZE GetAvailInput(Context* pContext) const override; bool Input(Context* pContext, - pdfium::span src_buf, + RetainPtr codec_memory, CFX_DIBAttribute* pAttribute) override; jmp_buf* GetJumpMark(Context* pContext); diff --git a/core/fxcodec/codec/ccodec_pngmodule.cpp b/core/fxcodec/codec/ccodec_pngmodule.cpp index 593c215db4..31de538087 100644 --- a/core/fxcodec/codec/ccodec_pngmodule.cpp +++ b/core/fxcodec/codec/ccodec_pngmodule.cpp @@ -210,7 +210,7 @@ FX_FILESIZE CCodec_PngModule::GetAvailInput(Context* pContext) const { } bool CCodec_PngModule::Input(Context* pContext, - pdfium::span src_buf, + RetainPtr codec_memory, CFX_DIBAttribute* pAttribute) { auto* ctx = static_cast(pContext); if (setjmp(png_jmpbuf(ctx->m_pPng))) { @@ -220,6 +220,7 @@ bool CCodec_PngModule::Input(Context* pContext, } return false; } + pdfium::span src_buf = codec_memory->GetSpan(); png_process_data(ctx->m_pPng, ctx->m_pInfo, src_buf.data(), src_buf.size()); return true; } diff --git a/core/fxcodec/codec/ccodec_pngmodule.h b/core/fxcodec/codec/ccodec_pngmodule.h index e97a221dfc..9754cb3bbd 100644 --- a/core/fxcodec/codec/ccodec_pngmodule.h +++ b/core/fxcodec/codec/ccodec_pngmodule.h @@ -35,7 +35,7 @@ class CCodec_PngModule final : public CodecModuleIface { // CodecModuleIface: FX_FILESIZE GetAvailInput(Context* pContext) const override; bool Input(Context* pContext, - pdfium::span src_buf, + RetainPtr codec_memory, CFX_DIBAttribute* pAttribute) override; std::unique_ptr Start(Delegate* pDelegate); diff --git a/core/fxcodec/codec/ccodec_progressivedecoder.cpp b/core/fxcodec/codec/ccodec_progressivedecoder.cpp index 0e6014595e..07665c1d4a 100644 --- a/core/fxcodec/codec/ccodec_progressivedecoder.cpp +++ b/core/fxcodec/codec/ccodec_progressivedecoder.cpp @@ -718,7 +718,10 @@ bool CCodec_ProgressiveDecoder::BmpDetectImageTypeInBuffer( std::unique_ptr pBmpContext = pBmpModule->Start(this); - pBmpModule->Input(pBmpContext.get(), {m_pSrcBuf.get(), m_SrcSize}, nullptr); + pBmpModule->Input(pBmpContext.get(), + pdfium::MakeRetain( + pdfium::make_span(m_pSrcBuf.get(), m_SrcSize)), + nullptr); std::vector palette; int32_t readResult = pBmpModule->ReadHeader( @@ -863,7 +866,10 @@ bool CCodec_ProgressiveDecoder::GifDetectImageTypeInBuffer( return false; } m_pGifContext = pGifModule->Start(this); - pGifModule->Input(m_pGifContext.get(), {m_pSrcBuf.get(), m_SrcSize}, nullptr); + pGifModule->Input(m_pGifContext.get(), + pdfium::MakeRetain( + pdfium::make_span(m_pSrcBuf.get(), m_SrcSize)), + nullptr); m_SrcComponents = 1; CFX_GifDecodeStatus readResult = pGifModule->ReadHeader( m_pGifContext.get(), &m_SrcWidth, &m_SrcHeight, &m_GifPltNumber, @@ -1046,7 +1052,9 @@ bool CCodec_ProgressiveDecoder::JpegDetectImageTypeInBuffer( m_status = FXCODEC_STATUS_ERR_MEMORY; return false; } - pJpegModule->Input(m_pJpegContext.get(), {m_pSrcBuf.get(), m_SrcSize}, + pJpegModule->Input(m_pJpegContext.get(), + pdfium::MakeRetain( + pdfium::make_span(m_pSrcBuf.get(), m_SrcSize)), nullptr); // Setting jump marker before calling ReadHeader, since a longjmp to // the marker indicates a fatal error. @@ -1256,8 +1264,11 @@ bool CCodec_ProgressiveDecoder::PngDetectImageTypeInBuffer( m_status = FXCODEC_STATUS_ERR_MEMORY; return false; } - bool bResult = pPngModule->Input(m_pPngContext.get(), - {m_pSrcBuf.get(), m_SrcSize}, pAttribute); + bool bResult = + pPngModule->Input(m_pPngContext.get(), + pdfium::MakeRetain( + pdfium::make_span(m_pSrcBuf.get(), m_SrcSize)), + pAttribute); while (bResult) { uint32_t remain_size = static_cast(m_pFile->GetSize()) - m_offSet; uint32_t input_size = @@ -1277,8 +1288,11 @@ bool CCodec_ProgressiveDecoder::PngDetectImageTypeInBuffer( return false; } m_offSet += input_size; - bResult = pPngModule->Input(m_pPngContext.get(), - {m_pSrcBuf.get(), input_size}, pAttribute); + bResult = + pPngModule->Input(m_pPngContext.get(), + pdfium::MakeRetain( + pdfium::make_span(m_pSrcBuf.get(), input_size)), + pAttribute); } m_pPngContext.reset(); if (m_SrcPassNumber == 0) { @@ -1365,8 +1379,11 @@ FXCODEC_STATUS CCodec_ProgressiveDecoder::PngContinueDecode() { return m_status; } m_offSet += input_size; - bResult = pPngModule->Input(m_pPngContext.get(), - {m_pSrcBuf.get(), input_size}, nullptr); + bResult = + pPngModule->Input(m_pPngContext.get(), + pdfium::MakeRetain( + pdfium::make_span(m_pSrcBuf.get(), input_size)), + nullptr); if (!bResult) { m_pDeviceBitmap = nullptr; m_pFile = nullptr; @@ -1633,7 +1650,10 @@ bool CCodec_ProgressiveDecoder::ReadMoreData( return false; } m_offSet += dwBytesToFetchFromFile; - return pModule->Input(pContext, {m_pSrcBuf.get(), m_SrcSize}, nullptr); + return pModule->Input(pContext, + pdfium::MakeRetain( + pdfium::make_span(m_pSrcBuf.get(), m_SrcSize)), + nullptr); } FXCODEC_STATUS CCodec_ProgressiveDecoder::LoadImageInfo( diff --git a/core/fxcodec/codec/ccodec_tiffmodule.cpp b/core/fxcodec/codec/ccodec_tiffmodule.cpp index d2c6c26dc0..15b80676b5 100644 --- a/core/fxcodec/codec/ccodec_tiffmodule.cpp +++ b/core/fxcodec/codec/ccodec_tiffmodule.cpp @@ -502,7 +502,7 @@ FX_FILESIZE CCodec_TiffModule::GetAvailInput(Context* pContext) const { } bool CCodec_TiffModule::Input(Context* pContext, - pdfium::span src_buf, + RetainPtr codec_memory, CFX_DIBAttribute*) { NOTREACHED(); return false; diff --git a/core/fxcodec/codec/ccodec_tiffmodule.h b/core/fxcodec/codec/ccodec_tiffmodule.h index 15d2a9f6d2..eee24de410 100644 --- a/core/fxcodec/codec/ccodec_tiffmodule.h +++ b/core/fxcodec/codec/ccodec_tiffmodule.h @@ -25,7 +25,7 @@ class CCodec_TiffModule final : public CodecModuleIface { // CodecModuleIface: FX_FILESIZE GetAvailInput(Context* pContext) const override; bool Input(Context* pContext, - pdfium::span src_buf, + RetainPtr codec_memory, CFX_DIBAttribute* pAttribute) override; bool LoadFrameInfo(Context* ctx, diff --git a/core/fxcodec/codec/cfx_codec_memory.h b/core/fxcodec/codec/cfx_codec_memory.h index 2907e892d2..0d11d41de8 100644 --- a/core/fxcodec/codec/cfx_codec_memory.h +++ b/core/fxcodec/codec/cfx_codec_memory.h @@ -13,6 +13,7 @@ class CFX_CodecMemory final : public Retainable { template friend RetainPtr pdfium::MakeRetain(Args&&... args); + pdfium::span GetSpan() { return buffer_; } uint8_t* GetBuffer() { return buffer_.data(); } size_t GetSize() const { return buffer_.size(); } size_t GetPosition() const { return pos_; } diff --git a/core/fxcodec/codec/codec_module_iface.h b/core/fxcodec/codec/codec_module_iface.h index e7faa892b2..52cb564d9a 100644 --- a/core/fxcodec/codec/codec_module_iface.h +++ b/core/fxcodec/codec/codec_module_iface.h @@ -7,6 +7,7 @@ #ifndef CORE_FXCODEC_CODEC_CODEC_MODULE_IFACE_H_ #define CORE_FXCODEC_CODEC_CODEC_MODULE_IFACE_H_ +#include "core/fxcodec/codec/cfx_codec_memory.h" #include "core/fxcrt/fx_system.h" #include "third_party/base/span.h" @@ -28,7 +29,7 @@ class CodecModuleIface { // setting details about the image extracted from the buffer into |pAttribute| // (if provided and the codec is capable providing that information). virtual bool Input(Context* pContext, - pdfium::span src_buf, + RetainPtr codec_memory, CFX_DIBAttribute* pAttribute) = 0; }; diff --git a/core/fxcodec/gif/cfx_gifcontext.cpp b/core/fxcodec/gif/cfx_gifcontext.cpp index c1467ae233..076331f418 100644 --- a/core/fxcodec/gif/cfx_gifcontext.cpp +++ b/core/fxcodec/gif/cfx_gifcontext.cpp @@ -342,8 +342,8 @@ CFX_GifDecodeStatus CFX_GifContext::LoadFrame(int32_t frame_num) { return CFX_GifDecodeStatus::Error; } -void CFX_GifContext::SetInputBuffer(pdfium::span src_buf) { - input_buffer_ = pdfium::MakeRetain(src_buf); +void CFX_GifContext::SetInputBuffer(RetainPtr codec_memory) { + input_buffer_ = std::move(codec_memory); } uint32_t CFX_GifContext::GetAvailInput() const { diff --git a/core/fxcodec/gif/cfx_gifcontext.h b/core/fxcodec/gif/cfx_gifcontext.h index c2828db6bb..4cf84a5ac6 100644 --- a/core/fxcodec/gif/cfx_gifcontext.h +++ b/core/fxcodec/gif/cfx_gifcontext.h @@ -41,7 +41,7 @@ class CFX_GifContext : public CodecModuleIface::Context { CFX_GifDecodeStatus ReadHeader(); CFX_GifDecodeStatus GetFrame(); CFX_GifDecodeStatus LoadFrame(int32_t frame_num); - void SetInputBuffer(pdfium::span src_buf); + void SetInputBuffer(RetainPtr codec_memory); uint32_t GetAvailInput() const; size_t GetFrameNum() const { return images_.size(); } diff --git a/core/fxcodec/gif/cfx_gifcontext_unittest.cpp b/core/fxcodec/gif/cfx_gifcontext_unittest.cpp index b9805ef399..31cac45795 100644 --- a/core/fxcodec/gif/cfx_gifcontext_unittest.cpp +++ b/core/fxcodec/gif/cfx_gifcontext_unittest.cpp @@ -19,6 +19,9 @@ class CFX_GifContextForTest final : public CFX_GifContext { using CFX_GifContext::ReadLogicalScreenDescriptor; CFX_CodecMemory* InputBuffer() const { return input_buffer_.Get(); } + void SetTestInputBuffer(pdfium::span input) { + SetInputBuffer(pdfium::MakeRetain(input)); + } }; TEST(CFX_GifContext, SetInputBuffer) { @@ -27,27 +30,27 @@ TEST(CFX_GifContext, SetInputBuffer) { // Context must not outlive its buffers. CFX_GifContextForTest context(nullptr, nullptr); - context.SetInputBuffer({nullptr, 0}); + context.SetTestInputBuffer({nullptr, 0}); EXPECT_EQ(nullptr, context.InputBuffer()->GetBuffer()); EXPECT_EQ(0u, context.InputBuffer()->GetSize()); EXPECT_EQ(0u, context.InputBuffer()->GetPosition()); - context.SetInputBuffer({nullptr, 100}); + context.SetTestInputBuffer({nullptr, 100}); EXPECT_EQ(nullptr, context.InputBuffer()->GetBuffer()); EXPECT_EQ(100u, context.InputBuffer()->GetSize()); EXPECT_EQ(0u, context.InputBuffer()->GetPosition()); - context.SetInputBuffer({buffer, 0}); + context.SetTestInputBuffer({buffer, 0}); EXPECT_EQ(buffer, context.InputBuffer()->GetBuffer()); EXPECT_EQ(0u, context.InputBuffer()->GetSize()); EXPECT_EQ(0u, context.InputBuffer()->GetPosition()); - context.SetInputBuffer({buffer, 3}); + context.SetTestInputBuffer({buffer, 3}); EXPECT_EQ(buffer, context.InputBuffer()->GetBuffer()); EXPECT_EQ(3u, context.InputBuffer()->GetSize()); EXPECT_EQ(0u, context.InputBuffer()->GetPosition()); - context.SetInputBuffer({buffer, 100}); + context.SetTestInputBuffer({buffer, 100}); EXPECT_EQ(buffer, context.InputBuffer()->GetBuffer()); EXPECT_EQ(100u, context.InputBuffer()->GetSize()); EXPECT_EQ(0u, context.InputBuffer()->GetPosition()); @@ -62,18 +65,18 @@ TEST(CFX_GifContext, ReadAllOrNone) { // Context must not outlive its buffers. CFX_GifContextForTest context(nullptr, nullptr); - context.SetInputBuffer({nullptr, 0}); + context.SetTestInputBuffer({nullptr, 0}); EXPECT_FALSE(context.ReadAllOrNone(nullptr, 0)); EXPECT_FALSE(context.ReadAllOrNone(nullptr, 10)); EXPECT_FALSE(context.ReadAllOrNone(dest_buffer.data(), 0)); EXPECT_FALSE(context.ReadAllOrNone(dest_buffer.data(), 10)); - context.SetInputBuffer({src_buffer, 0}); + context.SetTestInputBuffer({src_buffer, 0}); dest_buffer.resize(sizeof(src_buffer)); EXPECT_FALSE(context.ReadAllOrNone(dest_buffer.data(), sizeof(src_buffer))); - context.SetInputBuffer({src_buffer, 1}); + context.SetTestInputBuffer({src_buffer, 1}); EXPECT_FALSE(context.ReadAllOrNone(dest_buffer.data(), sizeof(src_buffer))); EXPECT_EQ(0u, context.InputBuffer()->GetPosition()); EXPECT_FALSE(context.ReadAllOrNone(nullptr, sizeof(src_buffer))); @@ -81,13 +84,13 @@ TEST(CFX_GifContext, ReadAllOrNone) { EXPECT_TRUE(context.ReadAllOrNone(dest_buffer.data(), 1)); EXPECT_EQ(src_buffer[0], dest_buffer[0]); - context.SetInputBuffer(src_buffer); + context.SetTestInputBuffer(src_buffer); EXPECT_FALSE(context.ReadAllOrNone(nullptr, sizeof(src_buffer))); EXPECT_TRUE(context.ReadAllOrNone(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); + context.SetTestInputBuffer(src_buffer); for (size_t i = 0; i < sizeof(src_buffer); i++) { EXPECT_TRUE(context.ReadAllOrNone(dest_buffer.data(), 1)); EXPECT_EQ(src_buffer[i], dest_buffer[0]); @@ -99,57 +102,57 @@ TEST(CFX_GifContext, ReadGifSignature) { CFX_GifContextForTest context(nullptr, nullptr); { uint8_t data[1]; - context.SetInputBuffer({data, 0}); + context.SetTestInputBuffer({data, 0}); EXPECT_EQ(CFX_GifDecodeStatus::Unfinished, context.ReadGifSignature()); EXPECT_EQ(0u, context.InputBuffer()->GetPosition()); - context.SetInputBuffer({}); + context.SetTestInputBuffer({}); } // Make sure testing the entire signature { uint8_t data[] = {'G', 'I', 'F'}; - context.SetInputBuffer(data); + context.SetTestInputBuffer(data); EXPECT_EQ(CFX_GifDecodeStatus::Unfinished, context.ReadGifSignature()); EXPECT_EQ(0u, context.InputBuffer()->GetPosition()); - context.SetInputBuffer({}); + context.SetTestInputBuffer({}); } { uint8_t data[] = {'N', 'O', 'T', 'G', 'I', 'F'}; - context.SetInputBuffer(data); + context.SetTestInputBuffer(data); EXPECT_EQ(CFX_GifDecodeStatus::Error, context.ReadGifSignature()); EXPECT_EQ(6u, context.InputBuffer()->GetPosition()); - context.SetInputBuffer({}); + context.SetTestInputBuffer({}); } // Make sure not matching GIF8*a { uint8_t data[] = {'G', 'I', 'F', '8', '0', 'a'}; - context.SetInputBuffer(data); + context.SetTestInputBuffer(data); EXPECT_EQ(CFX_GifDecodeStatus::Error, context.ReadGifSignature()); EXPECT_EQ(6u, context.InputBuffer()->GetPosition()); - context.SetInputBuffer({}); + context.SetTestInputBuffer({}); } // Make sure not matching GIF**a { uint8_t data[] = {'G', 'I', 'F', '9', '2', 'a'}; - context.SetInputBuffer(data); + context.SetTestInputBuffer(data); EXPECT_EQ(CFX_GifDecodeStatus::Error, context.ReadGifSignature()); EXPECT_EQ(6u, context.InputBuffer()->GetPosition()); - context.SetInputBuffer({}); + context.SetTestInputBuffer({}); } // One valid signature { uint8_t data[] = {'G', 'I', 'F', '8', '7', 'a'}; - context.SetInputBuffer(data); + context.SetTestInputBuffer(data); EXPECT_EQ(CFX_GifDecodeStatus::Success, context.ReadGifSignature()); EXPECT_EQ(6u, context.InputBuffer()->GetPosition()); - context.SetInputBuffer({}); + context.SetTestInputBuffer({}); } // The other valid signature { uint8_t data[] = {'G', 'I', 'F', '8', '9', 'a'}; - context.SetInputBuffer(data); + context.SetTestInputBuffer(data); EXPECT_EQ(CFX_GifDecodeStatus::Success, context.ReadGifSignature()); EXPECT_EQ(6u, context.InputBuffer()->GetPosition()); - context.SetInputBuffer({}); + context.SetTestInputBuffer({}); } } @@ -157,16 +160,16 @@ TEST(CFX_GifContext, ReadLocalScreenDescriptor) { CFX_GifContextForTest context(nullptr, nullptr); { uint8_t data[1]; - context.SetInputBuffer({data, 0}); + context.SetTestInputBuffer({data, 0}); EXPECT_EQ(CFX_GifDecodeStatus::Unfinished, context.ReadLogicalScreenDescriptor()); - context.SetInputBuffer({}); + context.SetTestInputBuffer({}); } // LSD with all the values zero'd { uint8_t lsd[sizeof(CFX_GifLocalScreenDescriptor)]; memset(&lsd, 0, sizeof(CFX_GifLocalScreenDescriptor)); - context.SetInputBuffer(lsd); + context.SetTestInputBuffer(lsd); EXPECT_EQ(CFX_GifDecodeStatus::Success, context.ReadLogicalScreenDescriptor()); @@ -177,13 +180,13 @@ TEST(CFX_GifContext, ReadLocalScreenDescriptor) { EXPECT_EQ(0, context.height_); EXPECT_EQ(0u, context.bc_index_); EXPECT_EQ(0u, context.pixel_aspect_); - context.SetInputBuffer({}); + context.SetTestInputBuffer({}); } // LSD with no global palette { uint8_t lsd[sizeof(CFX_GifLocalScreenDescriptor)] = {0x0A, 0x00, 0x00, 0x0F, 0x00, 0x01, 0x02}; - context.SetInputBuffer(lsd); + context.SetTestInputBuffer(lsd); EXPECT_EQ(CFX_GifDecodeStatus::Success, context.ReadLogicalScreenDescriptor()); @@ -194,19 +197,19 @@ TEST(CFX_GifContext, ReadLocalScreenDescriptor) { EXPECT_EQ(0x0F00, context.height_); EXPECT_EQ(0u, context.bc_index_); // bc_index_ is 0 if no global palette EXPECT_EQ(2u, context.pixel_aspect_); - context.SetInputBuffer({}); + context.SetTestInputBuffer({}); } // LSD with global palette bit set, but no global palette { uint8_t lsd[sizeof(CFX_GifLocalScreenDescriptor)] = {0x0A, 0x00, 0x00, 0x0F, 0x80, 0x01, 0x02}; - context.SetInputBuffer(lsd); + context.SetTestInputBuffer(lsd); EXPECT_EQ(CFX_GifDecodeStatus::Unfinished, context.ReadLogicalScreenDescriptor()); EXPECT_EQ(0u, context.InputBuffer()->GetPosition()); - context.SetInputBuffer({}); + context.SetTestInputBuffer({}); } // LSD with global palette { @@ -215,7 +218,8 @@ TEST(CFX_GifContext, ReadLocalScreenDescriptor) { uint8_t palette[4 * sizeof(CFX_GifPalette)]; } data = {{0x0A, 0x00, 0x00, 0x0F, 0xA9, 0x01, 0x02}, {0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1}}; - context.SetInputBuffer({reinterpret_cast(&data), sizeof(data)}); + context.SetTestInputBuffer( + {reinterpret_cast(&data), sizeof(data)}); EXPECT_EQ(CFX_GifDecodeStatus::Success, context.ReadLogicalScreenDescriptor()); @@ -230,7 +234,7 @@ TEST(CFX_GifContext, ReadLocalScreenDescriptor) { EXPECT_EQ(2, context.global_color_resolution_); EXPECT_EQ(0, memcmp(data.palette, context.global_palette_.data(), sizeof(data.palette))); - context.SetInputBuffer({}); + context.SetTestInputBuffer({}); } } @@ -243,21 +247,22 @@ TEST(CFX_GifContext, ReadHeader) { uint8_t lsd[sizeof(CFX_GifLocalScreenDescriptor)]; } data = {{'N', 'O', 'T', 'G', 'I', 'F'}, {0x0A, 0x00, 0x00, 0x0F, 0x00, 0x01, 0x02}}; - context.SetInputBuffer({reinterpret_cast(&data), sizeof(data)}); + context.SetTestInputBuffer( + {reinterpret_cast(&data), sizeof(data)}); EXPECT_EQ(CFX_GifDecodeStatus::Error, context.ReadHeader()); EXPECT_EQ(sizeof(data.signature), context.InputBuffer()->GetPosition()); - context.SetInputBuffer({}); + context.SetTestInputBuffer({}); } // Short after signature { uint8_t signature[] = {'G', 'I', 'F', '8', '7', 'a'}; - context.SetInputBuffer( + context.SetTestInputBuffer( {reinterpret_cast(&signature), sizeof(signature)}); EXPECT_EQ(CFX_GifDecodeStatus::Unfinished, context.ReadHeader()); EXPECT_EQ(sizeof(signature), context.InputBuffer()->GetPosition()); - context.SetInputBuffer({}); + context.SetTestInputBuffer({}); } // Success without global palette { @@ -266,7 +271,8 @@ TEST(CFX_GifContext, ReadHeader) { uint8_t lsd[sizeof(CFX_GifLocalScreenDescriptor)]; } data = {{'G', 'I', 'F', '8', '7', 'a'}, {0x0A, 0x00, 0x00, 0x0F, 0x00, 0x01, 0x02}}; - context.SetInputBuffer({reinterpret_cast(&data), sizeof(data)}); + context.SetTestInputBuffer( + {reinterpret_cast(&data), sizeof(data)}); EXPECT_EQ(CFX_GifDecodeStatus::Success, context.ReadHeader()); EXPECT_EQ(sizeof(data), context.InputBuffer()->GetPosition()); @@ -274,7 +280,7 @@ TEST(CFX_GifContext, ReadHeader) { EXPECT_EQ(0x0F00, context.height_); EXPECT_EQ(0u, context.bc_index_); // bc_index_ is 0 if no global palette EXPECT_EQ(2u, context.pixel_aspect_); - context.SetInputBuffer({}); + context.SetTestInputBuffer({}); } // Missing Global Palette { @@ -283,11 +289,12 @@ TEST(CFX_GifContext, ReadHeader) { uint8_t lsd[sizeof(CFX_GifLocalScreenDescriptor)]; } data = {{'G', 'I', 'F', '8', '7', 'a'}, {0x0A, 0x00, 0x00, 0x0F, 0x80, 0x01, 0x02}}; - context.SetInputBuffer({reinterpret_cast(&data), sizeof(data)}); + context.SetTestInputBuffer( + {reinterpret_cast(&data), sizeof(data)}); EXPECT_EQ(CFX_GifDecodeStatus::Unfinished, context.ReadHeader()); EXPECT_EQ(sizeof(data.signature), context.InputBuffer()->GetPosition()); - context.SetInputBuffer({}); + context.SetTestInputBuffer({}); } // Success with global palette { @@ -298,7 +305,8 @@ TEST(CFX_GifContext, ReadHeader) { } data = {{'G', 'I', 'F', '8', '7', 'a'}, {0x0A, 0x00, 0x00, 0x0F, 0xA9, 0x01, 0x02}, {0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1}}; - context.SetInputBuffer({reinterpret_cast(&data), sizeof(data)}); + context.SetTestInputBuffer( + {reinterpret_cast(&data), sizeof(data)}); EXPECT_EQ(CFX_GifDecodeStatus::Success, context.ReadHeader()); EXPECT_EQ(sizeof(data), context.InputBuffer()->GetPosition()); @@ -311,6 +319,6 @@ TEST(CFX_GifContext, ReadHeader) { EXPECT_EQ(2, context.global_color_resolution_); EXPECT_EQ(0, memcmp(data.palette, context.global_palette_.data(), sizeof(data.palette))); - context.SetInputBuffer({}); + context.SetTestInputBuffer({}); } } -- cgit v1.2.3