From ff4e6743ccaafdec4ade233a048cc198702d816e Mon Sep 17 00:00:00 2001 From: Sebastian Rasmussen Date: Tue, 2 Oct 2018 15:25:03 +0800 Subject: Revert to no CMM if the new CMM engine fails midway. The exception is still thrown, however. This just ensures that CMM is not left in an unknown state. --- source/fitz/colorspace.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'source/fitz') 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); -- cgit v1.2.3