From 73312e99feb13d2da789939fe451e71be63eea53 Mon Sep 17 00:00:00 2001 From: warmerda Date: Tue, 23 Jun 2009 18:52:48 +0000 Subject: keep values in src/dst structure properly during io calls (#2811021) --- ChangeLog | 6 +++++- jchuff.c | 3 +++ jdhuff.c | 8 +++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 473b03f..50bd849 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,13 @@ 2009-06-23 Frank Warmerdam + * jchuff.c, jdhuff.c: ensure data consumed is reflected in the source + structure before io calls. + http://sourceforge.net/support/tracker.php?aid=2811021 + * jchuff.h, jdct.h, jdhuff.h, jmemsys.h, jpegint.h, jpeglib.h: Added #ifdef's to rename public API to _12 version if NEED_12_BIT_NAMES is defined. - http://sourceforge.net/support/tracker.php?aid=2809983 + http://sourceforge.net/support/tracker.php?aid=2809983 * jcparam.c: add 12bit default huffman tables. http://sourceforge.net/support/tracker.php?aid=2809979 diff --git a/jchuff.c b/jchuff.c index f235250..5737ba9 100644 --- a/jchuff.c +++ b/jchuff.c @@ -280,6 +280,9 @@ dump_buffer (working_state * state) { struct jpeg_destination_mgr * dest = state->cinfo->dest; + dest->next_output_byte = state->next_output_byte; + dest->free_in_buffer = state->free_in_buffer; + if (! (*dest->empty_output_buffer) (state->cinfo)) return FALSE; /* After a successful buffer dump, must reset buffer pointers */ diff --git a/jdhuff.c b/jdhuff.c index b5ba39f..a87274e 100644 --- a/jdhuff.c +++ b/jdhuff.c @@ -309,7 +309,11 @@ jpeg_fill_bit_buffer (bitread_working_state * state, /* Attempt to read a byte */ if (bytes_in_buffer == 0) { - if (! (*cinfo->src->fill_input_buffer) (cinfo)) + + cinfo->src->next_input_byte = next_input_byte; + cinfo->src->bytes_in_buffer = bytes_in_buffer; + + if (! (*cinfo->src->fill_input_buffer) (cinfo)) return FALSE; next_input_byte = cinfo->src->next_input_byte; bytes_in_buffer = cinfo->src->bytes_in_buffer; @@ -326,6 +330,8 @@ jpeg_fill_bit_buffer (bitread_working_state * state, */ do { if (bytes_in_buffer == 0) { + cinfo->src->next_input_byte = next_input_byte; + cinfo->src->bytes_in_buffer = bytes_in_buffer; if (! (*cinfo->src->fill_input_buffer) (cinfo)) return FALSE; next_input_byte = cinfo->src->next_input_byte; -- cgit v1.2.1