From: DRC Date: Tue, 5 Dec 2017 21:27:34 +0000 (-0600) Subject: Fix lib state when skipping to end of 1-scan image X-Git-Tag: 1.5.3~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=773040f9d949d5f313caf7507abaf4bd5d7ffa12;p=libjpeg-turbo Fix lib state when skipping to end of 1-scan image If jpeg_skip_scanlines() is used to skip to the end of a single-scan image, then we need to change the library state such that subsequent calls to jpeg_consume_input() will return JPEG_REACHED_EOI rather than JPEG_SUSPENDED. (NOTE: not necessary for multi-scan images, since the scans are processed prior to any call to jpeg_skip_scanlines().) Unless I miss my guess, using jpeg_skip_scanlines() in this manner will prevent any markers at the end of the JPEG image from being read, but I don't think there is any way around that without actually reading the data, which would defeat the purpose of jpeg_skip_scanlines(). Fixes #194 --- diff --git a/ChangeLog.md b/ChangeLog.md index d6299f1..d7d31ca 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -32,6 +32,11 @@ program was used to decompress an existing JPEG image. occurred when attempting to decompress a JPEG image that had been compressed with 4:1:1 chrominance subsampling. +8. Fixed an issue whereby, when using `jpeg_skip_scanlines()` to skip to the +end of a single-scan (non-progressive) image, subsequent calls to +`jpeg_consume_input()` would return `JPEG_SUSPENDED` rather than +`JPEG_REACHED_EOI`. + 1.5.2 ===== diff --git a/jdapistd.c b/jdapistd.c index 6755dbb..14fc6e3 100644 --- a/jdapistd.c +++ b/jdapistd.c @@ -386,6 +386,8 @@ jpeg_skip_scanlines (j_decompress_ptr cinfo, JDIMENSION num_lines) /* Do not skip past the bottom of the image. */ if (cinfo->output_scanline + num_lines >= cinfo->output_height) { cinfo->output_scanline = cinfo->output_height; + (*cinfo->inputctl->finish_input_pass) (cinfo); + cinfo->inputctl->eoi_reached = TRUE; return cinfo->output_height - cinfo->output_scanline; }