summaryrefslogtreecommitdiff
path: root/source/fitz/list-device.c
diff options
context:
space:
mode:
authorSebastian Rasmussen <sebras@gmail.com>2016-08-16 03:05:52 +0800
committerSebastian Rasmussen <sebras@gmail.com>2016-09-06 21:52:16 +0800
commitd887bdc9c8a7133969eff97c2f9a96a84becb668 (patch)
tree3ba5ab54b7e3adfd72ebe9584faee4d62ea8d8f4 /source/fitz/list-device.c
parent2d3eca6dec6b8fc7a169b3fc357904069df6b6c4 (diff)
downloadmupdf-d887bdc9c8a7133969eff97c2f9a96a84becb668.tar.xz
Devices now handle colorspace being NULL as alpha-only.
Diffstat (limited to 'source/fitz/list-device.c')
-rw-r--r--source/fitz/list-device.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/source/fitz/list-device.c b/source/fitz/list-device.c
index d5e13375..dc8b1f0b 100644
--- a/source/fitz/list-device.c
+++ b/source/fitz/list-device.c
@@ -257,12 +257,7 @@ fz_append_display_node(
rect_off = size;
size += SIZE_IN_NODES(sizeof(fz_rect));
}
- if (color && !colorspace)
- {
- /* SoftMasks can omit a colorspace, but we know what they mean */
- colorspace = fz_device_gray(ctx);
- }
- if (colorspace)
+ if (color || colorspace)
{
if (colorspace != writer->colorspace)
{
@@ -307,7 +302,7 @@ fz_append_display_node(
else
{
int i;
- int n = colorspace->n;
+ int n = colorspace ? colorspace->n : 0;
colorspace_off = size;
size += SIZE_IN_NODES(sizeof(fz_colorspace *));
@@ -378,7 +373,7 @@ fz_append_display_node(
else
{
int i;
- int n = colorspace->n;
+ int n = colorspace ? colorspace->n : 0;
for (i=0; i < n; i++)
if (color[i] != 0.0f)
break;
@@ -394,7 +389,6 @@ fz_append_display_node(
}
if (color)
{
-
int i, n;
const float *wc = &writer->color[0];
@@ -569,7 +563,8 @@ fz_append_display_node(
default:
{
fz_colorspace **out_colorspace = (fz_colorspace **)(void *)(&node_ptr[colorspace_off]);
- int i, n = colorspace->n;
+ int i, n;
+ n = colorspace ? colorspace->n : 0;
*out_colorspace = fz_keep_colorspace(ctx, colorspace);
writer->colorspace = fz_keep_colorspace(ctx, colorspace);
@@ -1296,7 +1291,9 @@ fz_drop_display_list_imp(fz_context *ctx, fz_storable *list_)
cs_n = 4;
break;
case CS_OTHER_0:
- cs_n = (*(fz_colorspace **)node)->n;
+ cs_n = 0;
+ if (*(fz_colorspace **)node)
+ cs_n = (*(fz_colorspace **)node)->n;
fz_drop_colorspace(ctx, *(fz_colorspace **)node);
node += SIZE_IN_NODES(sizeof(fz_colorspace *));
break;
@@ -1442,7 +1439,7 @@ fz_run_display_list(fz_context *ctx, fz_display_list *list, fz_device *dev, cons
}
if (n.cs)
{
- int i;
+ int i, en;
fz_drop_colorspace(ctx, colorspace);
switch (n.cs)
@@ -1485,7 +1482,8 @@ fz_run_display_list(fz_context *ctx, fz_display_list *list, fz_device *dev, cons
case CS_OTHER_0:
colorspace = fz_keep_colorspace(ctx, *(fz_colorspace **)(node));
node += SIZE_IN_NODES(sizeof(fz_colorspace *));
- for (i = 0; i < colorspace->n; i++)
+ en = colorspace ? colorspace->n : 0;
+ for (i = 0; i < en; i++)
color[i] = 0.0f;
break;
}