From 226faa226b2d83b1ff8f9b2e137a72254e53c5a8 Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Fri, 7 Jan 2011 11:41:24 +0900 Subject: [PATCH] Init setjmp buffer before calling jpeg_create_decompress() in DCTStream::init(). --- poppler/DCTStream.cc | 20 +++++++++++--------- poppler/DCTStream.h | 7 +++++-- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/poppler/DCTStream.cc b/poppler/DCTStream.cc index 212a8bd..b45704b 100644 --- a/poppler/DCTStream.cc +++ b/poppler/DCTStream.cc @@ -70,14 +70,14 @@ DCTStream::~DCTStream() { static void exitErrorHandler(jpeg_common_struct *error) { j_decompress_ptr cinfo = (j_decompress_ptr)error; - str_src_mgr * src = (struct str_src_mgr *)cinfo->src; - longjmp(src->setjmp_buffer, 1); + str_error_mgr * err = (struct str_error_mgr *)cinfo->err; + longjmp(err->setjmp_buffer, 1); } void DCTStream::init() { - jpeg_std_error(&jerr); - jerr.error_exit = &exitErrorHandler; + jpeg_std_error(&err.pub); + err.pub.error_exit = &exitErrorHandler; src.pub.init_source = str_init_source; src.pub.fill_input_buffer = str_fill_input_buffer; src.pub.skip_input_data = str_skip_input_data; @@ -90,9 +90,11 @@ void DCTStream::init() current = NULL; limit = NULL; - cinfo.err = &jerr; - jpeg_create_decompress(&cinfo); - cinfo.src = (jpeg_source_mgr *)&src; + cinfo.err = &err.pub; + if (!setjmp(err.setjmp_buffer)) { + jpeg_create_decompress(&cinfo); + cinfo.src = (jpeg_source_mgr *)&src; + } row_buffer = NULL; } @@ -138,7 +140,7 @@ void DCTStream::reset() { } } - if (!setjmp(src.setjmp_buffer)) { + if (!setjmp(err.setjmp_buffer)) { jpeg_read_header(&cinfo, TRUE); // figure out color transform @@ -182,7 +184,7 @@ void DCTStream::reset() { if (current == limit) { \ if (cinfo.output_scanline < cinfo.output_height) \ { \ - if (!setjmp(src.setjmp_buffer)) \ + if (!setjmp(err.setjmp_buffer)) \ { \ if (!jpeg_read_scanlines(&cinfo, row_buffer, 1)) c = EOF; \ else { \ diff --git a/poppler/DCTStream.h b/poppler/DCTStream.h index 2694f36..b7d86e3 100644 --- a/poppler/DCTStream.h +++ b/poppler/DCTStream.h @@ -50,9 +50,12 @@ struct str_src_mgr { JOCTET buffer; Stream *str; int index; - jmp_buf setjmp_buffer; }; +struct str_error_mgr { + struct jpeg_error_mgr pub; + jmp_buf setjmp_buffer; +}; class DCTStream: public FilterStream { public: @@ -77,7 +80,7 @@ private: JSAMPLE *current; JSAMPLE *limit; struct jpeg_decompress_struct cinfo; - struct jpeg_error_mgr jerr; + struct str_error_mgr err; struct str_src_mgr src; JSAMPARRAY row_buffer; }; -- 1.7.2.3