From 6f3593c5cdf62915fc086448312671ce1fce5291 Mon Sep 17 00:00:00 2001 From: Nicolas Pena Date: Tue, 23 May 2017 19:07:25 -0400 Subject: Remove longjmp from the Gif module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Gif module is only using the longjmp as a way to catch errors, so this CL makes it use GifDecodeStatus::Error instead. Change-Id: I9c97e63ed851d2a80e38f1d2cd9e8f297d608cb2 Reviewed-on: https://pdfium-review.googlesource.com/5850 Commit-Queue: Nicolás Peña Reviewed-by: Tom Sepez --- core/fxcodec/codec/ccodec_gifmodule.cpp | 42 +++++++++++++-------------------- 1 file changed, 16 insertions(+), 26 deletions(-) (limited to 'core/fxcodec/codec') diff --git a/core/fxcodec/codec/ccodec_gifmodule.cpp b/core/fxcodec/codec/ccodec_gifmodule.cpp index 438f019ee9..11980ee7a5 100644 --- a/core/fxcodec/codec/ccodec_gifmodule.cpp +++ b/core/fxcodec/codec/ccodec_gifmodule.cpp @@ -30,9 +30,6 @@ GifDecodeStatus CCodec_GifModule::ReadHeader(CGifContext* context, void** pal_pp, int* bg_index, CFX_DIBAttribute* pAttribute) { - if (setjmp(context->jmpbuf)) - return GifDecodeStatus::Error; - GifDecodeStatus ret = gif_read_header(context); if (ret != GifDecodeStatus::Success) return ret; @@ -48,9 +45,6 @@ GifDecodeStatus CCodec_GifModule::ReadHeader(CGifContext* context, GifDecodeStatus CCodec_GifModule::LoadFrameInfo(CGifContext* context, int* frame_num) { - if (setjmp(context->jmpbuf)) - return GifDecodeStatus::Error; - GifDecodeStatus ret = gif_get_frame(context); if (ret != GifDecodeStatus::Success) return ret; @@ -62,28 +56,24 @@ GifDecodeStatus CCodec_GifModule::LoadFrameInfo(CGifContext* context, GifDecodeStatus CCodec_GifModule::LoadFrame(CGifContext* context, int frame_num, CFX_DIBAttribute* pAttribute) { - if (setjmp(context->jmpbuf)) - return GifDecodeStatus::Error; - GifDecodeStatus ret = gif_load_frame(context, frame_num); - if (ret == GifDecodeStatus::Success) { - if (pAttribute) { - pAttribute->m_nGifLeft = context->m_Images[frame_num]->m_ImageInfo.left; - pAttribute->m_nGifTop = context->m_Images[frame_num]->m_ImageInfo.top; - pAttribute->m_fAspectRatio = context->pixel_aspect; - const uint8_t* buf = - reinterpret_cast(context->cmt_data.GetBuffer(0)); - uint32_t len = context->cmt_data.GetLength(); - if (len > 21) { - uint8_t size = *buf++; - if (size != 0) - pAttribute->m_strAuthor = CFX_ByteString(buf, size); - else - pAttribute->m_strAuthor.clear(); - } - } + if (ret != GifDecodeStatus::Success || !pAttribute) + return ret; + + pAttribute->m_nGifLeft = context->m_Images[frame_num]->m_ImageInfo.left; + pAttribute->m_nGifTop = context->m_Images[frame_num]->m_ImageInfo.top; + pAttribute->m_fAspectRatio = context->pixel_aspect; + const uint8_t* buf = + reinterpret_cast(context->cmt_data.GetBuffer(0)); + uint32_t len = context->cmt_data.GetLength(); + if (len > 21) { + uint8_t size = *buf++; + if (size != 0) + pAttribute->m_strAuthor = CFX_ByteString(buf, size); + else + pAttribute->m_strAuthor.clear(); } - return ret; + return GifDecodeStatus::Success; } uint32_t CCodec_GifModule::GetAvailInput(CGifContext* context, -- cgit v1.2.3