From 773040f9d949d5f313caf7507abaf4bd5d7ffa12 Mon Sep 17 00:00:00 2001 From: DRC Date: Tue, 5 Dec 2017 15:27:34 -0600 Subject: [PATCH] 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 --- ChangeLog.md | 5 +++++ jdapistd.c | 2 ++ 2 files changed, 7 insertions(+) diff --git a/ChangeLog.md b/ChangeLog.md index d6299f11..d7d31ca8 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 6755dbb0..14fc6e31 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; }