diff options
author | Sebastian Rasmussen <sebras@gmail.com> | 2018-10-02 15:25:03 +0800 |
---|---|---|
committer | Sebastian Rasmussen <sebras@gmail.com> | 2018-10-12 15:50:49 +0800 |
commit | ff4e6743ccaafdec4ade233a048cc198702d816e (patch) | |
tree | 4f6fb1c01c760d31af2cb905bd54fd8d48e56517 /source | |
parent | f3da0a43f59d0d49a912f46c51f44432087d782a (diff) | |
download | mupdf-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')
-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); |