summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Liddell <chris.liddell@artifex.com>2016-09-07 09:58:50 +0100
committerChris Liddell <chris.liddell@artifex.com>2016-09-13 16:23:25 +0100
commitdbfde5f3400e97b6d9b71a6549ff419dcefc9a95 (patch)
treec101298a871d663319a593286be884e668650bde
parent8e541e3e356624506720fddd26441a2c43d82024 (diff)
downloadghostpdl-dbfde5f3400e97b6d9b71a6549ff419dcefc9a95.tar.gz
Bug 696599: cast disguised wrong type dereference.
The code was casting to a gx_device_printer to get to the BLS_force_memory value, but since the target device for a clist device is no longer necessarily a printer device, it wasn't guaranteed that the struct contained that entry. So move BLS_force_memory to the base device type (gx_device), so it's always available.
-rw-r--r--base/gdevprn.h2
-rw-r--r--base/gxclbits.c2
-rw-r--r--base/gxdevcli.h1
-rw-r--r--base/gxdevice.h3
-rw-r--r--devices/gdevbit.c1
5 files changed, 5 insertions, 4 deletions
diff --git a/base/gdevprn.h b/base/gdevprn.h
index 8411b89d3..322c3eeb6 100644
--- a/base/gdevprn.h
+++ b/base/gdevprn.h
@@ -145,7 +145,6 @@ typedef struct bg_print_s {
/* ------ Device parameters that must be set ------ */\
/* ------ before calling the device open routine. ------ */\
char fname[prn_fname_sizeof]; /* OutputFile */\
- bool BLS_force_memory;\
/* ------ Other device parameters ------ */\
bool OpenOutputFile;\
bool ReopenPerPage;\
@@ -323,7 +322,6 @@ extern const gx_device_procs prn_bg_procs;
gdev_prn_default_get_space_params\
},\
{ 0 }, /* fname */\
- 0/*false*/, /* BLS_force_memory */\
0/*false*/, /* OpenOutputFile */\
0/*false*/, /* ReopenPerPage */\
0/*false*/, duplex_set, /* Duplex[_set] */\
diff --git a/base/gxclbits.c b/base/gxclbits.c
index 081b0a62d..4313c764e 100644
--- a/base/gxclbits.c
+++ b/base/gxclbits.c
@@ -752,7 +752,7 @@ clist_change_bits(gx_device_clist_writer * cldev, gx_clist_state * pcls,
loc.tile->width * pdepth,
loc.tile->height * loc.tile->num_planes, loc.tile->cb_raster,
rsize,
- decompress_elsewhere | (((gx_device_printer *)cldev->target)->BLS_force_memory ? (1 << cmd_compress_cfe) : 0),
+ decompress_elsewhere | (cldev->target->BLS_force_memory ? (1 << cmd_compress_cfe) : 0),
&dp, &csize);
if (code < 0)
diff --git a/base/gxdevcli.h b/base/gxdevcli.h
index b0bb0094f..6d0d3f43d 100644
--- a/base/gxdevcli.h
+++ b/base/gxdevcli.h
@@ -781,6 +781,7 @@ typedef struct gdev_pagelist_s {
bool LockSafetyParams; /* If true, prevent unsafe changes */\
long band_offset_x; /* offsets of clist band base to (mem device) buffer */\
long band_offset_y; /* for rendering that is phase sensitive (old wtsimdi) */\
+ bool BLS_force_memory;\
gx_stroked_gradient_recognizer_t sgr;\
int MaxPatternBitmap; /* Threshold for switching to pattern_clist mode */\
bool page_uses_transparency; /* PDF 1.4 transparency is used. */\
diff --git a/base/gxdevice.h b/base/gxdevice.h
index 534d47dc2..76f1b2b61 100644
--- a/base/gxdevice.h
+++ b/base/gxdevice.h
@@ -122,7 +122,8 @@
0/*FirstPage*/, 0/*LastPage*/, 0/*PageHandlerPushed*/, 0/*DisablePageHandler*/, 0/* Object Filter*/, 0/*ObjectHandlerPushed*/,\
0/*PageCount*/, 0/*ShowpageCount*/, 1/*NumCopies*/, 0/*NumCopies_set*/,\
0/*IgnoreNumCopies*/, 0/*UseCIEColor*/, 0/*LockSafetyParams*/,\
- 0/*band_offset_x*/, 0/*band_offset_y*/, {false}/* sgr */,\
+ 0/*band_offset_x*/, 0/*band_offset_y*/, false /*BLS_force_memory*/, \
+ {false}/* sgr */,\
0/* MaxPatternBitmap */, 0/*page_uses_transparency*/,\
{ MAX_BITMAP, BUFFER_SPACE,\
{ BAND_PARAMS_INITIAL_VALUES },\
diff --git a/devices/gdevbit.c b/devices/gdevbit.c
index 675d399af..5a4b17546 100644
--- a/devices/gdevbit.c
+++ b/devices/gdevbit.c
@@ -305,6 +305,7 @@ const gx_device_bit gs_bitrgbtags_device =
0 , /*LockSafetyParams*/
0, /*band_offset_x*/
0, /*band_offset_*/
+ false, /*BLS_force_memory*/
{false}, /*sgr*/
0, /*MaxPatternBitmap*/
0, /*page_uses_transparency*/