diff options
author | Justin Maggard <jmaggard@users.sourceforge.net> | 2009-03-28 01:22:23 +0300 |
---|---|---|
committer | Justin Maggard <jmaggard@users.sourceforge.net> | 2009-03-28 01:22:23 +0300 |
commit | 5a30bc3caad42b0156ec53015d77e5b9b271f6e3 (patch) | |
tree | da150433aebf92b51f4a7aafb047e88bac8a86a1 /image_utils.c | |
parent | bbc88bcaefbcd4c69d6f0afa41f711b55abcb8a3 (diff) |
* Fix bug with bad album art.
Diffstat (limited to 'image_utils.c')
-rw-r--r-- | image_utils.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/image_utils.c b/image_utils.c index 3cf2ad4..dfab925 100644 --- a/image_utils.c +++ b/image_utils.c @@ -31,6 +31,7 @@ #include <string.h> #include <unistd.h> #include <sys/types.h> +#include <setjmp.h> #include <jpeglib.h> #include "image_utils.h" @@ -175,11 +176,13 @@ jpeg_memory_src(j_decompress_ptr cinfo, const unsigned char * buffer, size_t buf src->pub.bytes_in_buffer = bufsize; } +jmp_buf setjmp_buffer; /* Don't exit on error like libjpeg likes to do */ static void libjpeg_error_handler(j_common_ptr cinfo) { cinfo->err->output_message(cinfo); + longjmp(setjmp_buffer, 1); return; } @@ -258,6 +261,13 @@ image_new_from_jpeg(const char * path, int is_file, const char * buf, int size) { jpeg_memory_src(&cinfo, (const unsigned char *)buf, size); } + if( setjmp(setjmp_buffer) ) + { + jpeg_destroy_decompress(&cinfo); + if( is_file && file ) + fclose(file); + return NULL; + } jpeg_read_header(&cinfo, TRUE); cinfo.do_fancy_upsampling = FALSE; cinfo.do_block_smoothing = FALSE; |