summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@gmail.com>2017-09-08 17:39:46 +0200
committerSebastian Rasmussen <sebras@gmail.com>2017-09-12 20:52:12 +0800
commite4a1c1d08bb04c4d79a6957dd52c51852dafae19 (patch)
treea2f7e854f5eafa7de4b2a9aa91adc92d67b646bf
parent1535230e8483b43b8b4c2146ec8ba5d5b6bfc0cc (diff)
downloadmupdf-e4a1c1d08bb04c4d79a6957dd52c51852dafae19.tar.xz
Clean up cached color converters in case of error.
-rw-r--r--source/fitz/test-device.c86
1 files changed, 50 insertions, 36 deletions
diff --git a/source/fitz/test-device.c b/source/fitz/test-device.c
index 94572a55..f299613e 100644
--- a/source/fitz/test-device.c
+++ b/source/fitz/test-device.c
@@ -241,30 +241,37 @@ fz_test_fill_image(fz_context *ctx, fz_device *dev_, fz_image *image, const fz_m
unsigned int n = (unsigned int)image->n;
fz_init_cached_color_converter(ctx, &cc, NULL, fz_device_rgb(ctx), image->colorspace, color_params);
- for (i = 0; i < count; i++)
+
+ fz_try(ctx)
{
- float cs[FZ_MAX_COLORS];
- float ds[FZ_MAX_COLORS];
+ for (i = 0; i < count; i++)
+ {
+ float cs[FZ_MAX_COLORS];
+ float ds[FZ_MAX_COLORS];
- for (k = 0; k < n; k++)
- cs[k] = fz_read_byte(ctx, stream) / 255.0f;
+ for (k = 0; k < n; k++)
+ cs[k] = fz_read_byte(ctx, stream) / 255.0f;
- cc.convert(ctx, &cc, ds, cs);
+ cc.convert(ctx, &cc, ds, cs);
- if (is_rgb_color(dev->threshold, ds[0], ds[1], ds[2]))
- {
- *dev->is_color = 1;
- dev->resolved = 1;
- if (dev->passthrough == NULL)
+ if (is_rgb_color(dev->threshold, ds[0], ds[1], ds[2]))
{
- fz_drop_stream(ctx, stream);
- fz_fin_cached_color_converter(ctx, &cc);
- fz_throw(ctx, FZ_ERROR_ABORT, "Page found as color; stopping interpretation");
+ *dev->is_color = 1;
+ dev->resolved = 1;
+ if (dev->passthrough == NULL)
+ {
+ fz_drop_stream(ctx, stream);
+ fz_fin_cached_color_converter(ctx, &cc);
+ fz_throw(ctx, FZ_ERROR_ABORT, "Page found as color; stopping interpretation");
+ }
+ break;
}
- break;
}
}
- fz_fin_cached_color_converter(ctx, &cc);
+ fz_always(ctx)
+ fz_fin_cached_color_converter(ctx, &cc);
+ fz_catch(ctx)
+ fz_rethrow(ctx);
}
fz_drop_stream(ctx, stream);
break;
@@ -309,36 +316,43 @@ fz_test_fill_image(fz_context *ctx, fz_device *dev_, fz_image *image, const fz_m
unsigned int n = (unsigned int)pix->n-1;
fz_init_cached_color_converter(ctx, &cc, NULL, fz_device_rgb(ctx), pix->colorspace, color_params);
- while (h--)
+
+ fz_try(ctx)
{
- for (i = 0; i < count; i++)
+ while (h--)
{
- float cs[FZ_MAX_COLORS];
- float ds[FZ_MAX_COLORS];
+ for (i = 0; i < count; i++)
+ {
+ float cs[FZ_MAX_COLORS];
+ float ds[FZ_MAX_COLORS];
- for (k = 0; k < n; k++)
- cs[k] = (*s++) / 255.0f;
- if (sa && *s++ == 0)
- continue;
+ for (k = 0; k < n; k++)
+ cs[k] = (*s++) / 255.0f;
+ if (sa && *s++ == 0)
+ continue;
- cc.convert(ctx, &cc, ds, cs);
+ cc.convert(ctx, &cc, ds, cs);
- if (is_rgb_color(dev->threshold, ds[0], ds[1], ds[2]))
- {
- *dev->is_color = 1;
- dev->resolved = 1;
- if (dev->passthrough == NULL)
+ if (is_rgb_color(dev->threshold, ds[0], ds[1], ds[2]))
{
- fz_fin_cached_color_converter(ctx, &cc);
- fz_drop_pixmap(ctx, pix);
- fz_throw(ctx, FZ_ERROR_ABORT, "Page found as color; stopping interpretation");
+ *dev->is_color = 1;
+ dev->resolved = 1;
+ if (dev->passthrough == NULL)
+ {
+ fz_fin_cached_color_converter(ctx, &cc);
+ fz_drop_pixmap(ctx, pix);
+ fz_throw(ctx, FZ_ERROR_ABORT, "Page found as color; stopping interpretation");
+ }
+ break;
}
- break;
}
+ s += ss;
}
- s += ss;
}
- fz_fin_cached_color_converter(ctx, &cc);
+ fz_always(ctx)
+ fz_fin_cached_color_converter(ctx, &cc);
+ fz_catch(ctx)
+ fz_rethrow(ctx);
}
fz_drop_pixmap(ctx, pix);