summaryrefslogtreecommitdiff
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
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.
-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);