summaryrefslogtreecommitdiff
path: root/source/fitz
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@gmail.com>2018-10-02 15:25:03 +0800
committerSebastian Rasmussen <sebras@gmail.com>2018-10-12 15:50:49 +0800
commitff4e6743ccaafdec4ade233a048cc198702d816e (patch)
tree4f6fb1c01c760d31af2cb905bd54fd8d48e56517 /source/fitz
parentf3da0a43f59d0d49a912f46c51f44432087d782a (diff)
downloadmupdf-ff4e6743ccaafdec4ade233a048cc198702d816e.tar.xz
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.
Diffstat (limited to 'source/fitz')
-rw-r--r--source/fitz/colorspace.c27
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);