cairo-util: Return NULL instead of exit() on jpeg load failure
This commit is contained in:
@@ -25,6 +25,7 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <setjmp.h>
|
||||||
#include <cairo.h>
|
#include <cairo.h>
|
||||||
#include "cairo-util.h"
|
#include "cairo-util.h"
|
||||||
|
|
||||||
@@ -304,6 +305,12 @@ swizzle_row(JSAMPLE *row, JDIMENSION width)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
error_exit(j_common_ptr cinfo)
|
||||||
|
{
|
||||||
|
longjmp(cinfo->client_data, 1);
|
||||||
|
}
|
||||||
|
|
||||||
cairo_surface_t *
|
cairo_surface_t *
|
||||||
load_jpeg(const char *filename)
|
load_jpeg(const char *filename)
|
||||||
{
|
{
|
||||||
@@ -312,8 +319,14 @@ load_jpeg(const char *filename)
|
|||||||
FILE *fp;
|
FILE *fp;
|
||||||
int stride, i, first;
|
int stride, i, first;
|
||||||
JSAMPLE *data, *rows[4];
|
JSAMPLE *data, *rows[4];
|
||||||
|
jmp_buf env;
|
||||||
|
|
||||||
cinfo.err = jpeg_std_error(&jerr);
|
cinfo.err = jpeg_std_error(&jerr);
|
||||||
|
jerr.error_exit = error_exit;
|
||||||
|
cinfo.client_data = env;
|
||||||
|
if (setjmp(env))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
jpeg_create_decompress(&cinfo);
|
jpeg_create_decompress(&cinfo);
|
||||||
|
|
||||||
fp = fopen(filename, "rb");
|
fp = fopen(filename, "rb");
|
||||||
|
|||||||
Reference in New Issue
Block a user