diff options
-rw-r--r-- | source/fitz/colorspace.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/source/fitz/colorspace.c b/source/fitz/colorspace.c index 55f2f080..c5a9a542 100644 --- a/source/fitz/colorspace.c +++ b/source/fitz/colorspace.c @@ -847,17 +847,34 @@ void fz_set_cmm_engine(fz_context *ctx, const fz_cmm_engine *engine) cct->lab = NULL; fz_drop_cmm_context(ctx); + cct->cmm = engine; fz_new_cmm_context(ctx); if (engine) { - cct->gray = fz_new_icc_colorspace(ctx, FZ_COLORSPACE_GRAY, NULL); - cct->rgb = fz_new_icc_colorspace(ctx, FZ_COLORSPACE_RGB, NULL); - cct->bgr = fz_new_icc_colorspace(ctx, FZ_COLORSPACE_BGR, NULL); - cct->cmyk = fz_new_icc_colorspace(ctx, FZ_COLORSPACE_CMYK, NULL); - cct->lab = fz_new_icc_colorspace(ctx, FZ_COLORSPACE_LAB, NULL); + fz_try(ctx) + { + cct->gray = fz_new_icc_colorspace(ctx, FZ_COLORSPACE_GRAY, NULL); + cct->rgb = fz_new_icc_colorspace(ctx, FZ_COLORSPACE_RGB, NULL); + cct->bgr = fz_new_icc_colorspace(ctx, FZ_COLORSPACE_BGR, NULL); + cct->cmyk = fz_new_icc_colorspace(ctx, FZ_COLORSPACE_CMYK, NULL); + cct->lab = fz_new_icc_colorspace(ctx, FZ_COLORSPACE_LAB, NULL); + } + fz_catch(ctx) + { + fz_drop_colorspace(ctx, cct->gray); + fz_drop_colorspace(ctx, cct->rgb); + fz_drop_colorspace(ctx, cct->bgr); + fz_drop_colorspace(ctx, cct->cmyk); + fz_drop_colorspace(ctx, cct->lab); + fz_drop_cmm_context(ctx); + cct->cmm = NULL; + fz_new_cmm_context(ctx); + set_no_icc(cct); + fz_rethrow(ctx); + } } else set_no_icc(cct); |