[gthumb] jpeg loader: fixed abort in case of error
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] jpeg loader: fixed abort in case of error
- Date: Sun, 19 Aug 2018 19:11:41 +0000 (UTC)
commit 125987507cb2faf0cab658d0773b8dba7ed2fe6c
Author: Paolo Bacchilega <paobac src gnome org>
Date: Sun Aug 19 20:47:44 2018 +0200
jpeg loader: fixed abort in case of error
do not call siglongjmp more then once in case of error
extensions/cairo_io/cairo-image-surface-jpeg.c | 29 +++++++++++---------------
1 file changed, 12 insertions(+), 17 deletions(-)
---
diff --git a/extensions/cairo_io/cairo-image-surface-jpeg.c b/extensions/cairo_io/cairo-image-surface-jpeg.c
index 73cb0e26..bc700c14 100644
--- a/extensions/cairo_io/cairo-image-surface-jpeg.c
+++ b/extensions/cairo_io/cairo-image-surface-jpeg.c
@@ -48,34 +48,28 @@ static void
fatal_error_handler (j_common_ptr cinfo)
{
struct error_handler_data *errmgr;
- char buffer[JMSG_LENGTH_MAX];
errmgr = (struct error_handler_data *) cinfo->err;
+ if ((errmgr->error != NULL) && (*errmgr->error == NULL)) {
+ char buffer[JMSG_LENGTH_MAX];
- /* Create the message */
- (* cinfo->err->format_message) (cinfo, buffer);
+ /* Create the message */
+ (* cinfo->err->format_message) (cinfo, buffer);
- /* broken check for *error == NULL for robustness against
- * crappy JPEG library
- */
- if (errmgr->error && *errmgr->error == NULL) {
- g_set_error (errmgr->error,
- GDK_PIXBUF_ERROR,
- GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
+ g_set_error (errmgr->error,
+ GDK_PIXBUF_ERROR,
+ GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
_("Error interpreting JPEG image file: %s"),
- buffer);
- }
-
- siglongjmp (errmgr->setjmp_buffer, 1);
-
- g_assert_not_reached ();
+ buffer);
+ siglongjmp (errmgr->setjmp_buffer, 1);
+ }
}
static void
output_message_handler (j_common_ptr cinfo)
{
- /* This method keeps libjpeg from dumping crap to stderr */
+ /* This method keeps libjpeg from dumping text to stderr */
/* do nothing */
}
@@ -588,6 +582,7 @@ _cairo_image_surface_create_from_jpeg (GInputStream *istream,
g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_CANCELLED, "");
cairo_surface_destroy (surface);
+ surface = NULL;
}
if (read_all_scanlines)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]