diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-09-13 20:55:53 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-09-13 21:08:39 -0400 |
commit | 91e19bc36d013158004ee2d82b050f47cecf8133 (patch) | |
tree | c5cfc971bfac83e3bdeb71760769487fc69378a6 | |
parent | 30d21ef791b46c812c1bebd89ef3a6e154a0689d (diff) | |
download | gtk+-img-loading.tar.gz |
jpeg: Set errorsimg-loading
-rw-r--r-- | gdk/loaders/gdkjpeg.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/gdk/loaders/gdkjpeg.c b/gdk/loaders/gdkjpeg.c index dc17c7f26e..74a1c9623a 100644 --- a/gdk/loaders/gdkjpeg.c +++ b/gdk/loaders/gdkjpeg.c @@ -44,9 +44,20 @@ 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; + cinfo->err->format_message (cinfo, buffer); + + if (errmgr->error && *errmgr->error == NULL) + g_set_error (errmgr->error, + GDK_TEXTURE_ERROR, + cinfo->err->msg_code == JERR_OUT_OF_MEMORY + ? GDK_TEXTURE_ERROR_INSUFFICIENT_MEMORY + : GDK_TEXTURE_ERROR_CORRUPT_IMAGE, + "Error interpreting JPEG image file (%s)", buffer); + siglongjmp (errmgr->setjmp_buffer, 1); g_assert_not_reached (); @@ -100,7 +111,15 @@ gdk_load_jpeg (GBytes *input_bytes, height = info.output_height; size = width * height * 3; - data = g_malloc (size); + data = g_try_malloc_n (width * 3, height); + if (!data) + { + g_set_error_literal (error, + GDK_TEXTURE_ERROR, GDK_TEXTURE_ERROR_INSUFFICIENT_MEMORY, + "Not enough memory to load jpeg"); + jpeg_destroy_decompress (&info); + return NULL; + } while (info.output_scanline < info.output_height) { |