summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Sharp <ken.sharp@artifex.com>2018-11-17 09:37:07 +0000
committerChris Liddell <chris.liddell@artifex.com>2018-11-19 09:50:00 +0000
commitc69827c308b608719d786fc14c8518af4dd6b335 (patch)
treec8b6008296fb1641f06d85c9fb8caaf209188e75
parent4548ceaf5ada7f7a4c4da5907e27fec62c1ce63d (diff)
downloadghostpdl-c69827c308b608719d786fc14c8518af4dd6b335.tar.gz
Coverity ID 323322
The new 'transform_pixel_region' method default for forwarding devices tests the target device to see if its NULL (some forwarding devices are not always forwarding devices, eg bbox), and if it is NULL then instead of passing the call to the target device it calls the graphics library default. Unfortunately it was passing the target device as an argument, and this is now certain to be NULL. In gx_default_transform_pixel_region_begin() we then dereference the pointer which would cause a crash. So instead, pass the device itself when its not actually a forwarding device. Also, some white space changes.
-rw-r--r--base/gdevnfwd.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/base/gdevnfwd.c b/base/gdevnfwd.c
index 6cc1fdfe2..28d9c4fc3 100644
--- a/base/gdevnfwd.c
+++ b/base/gdevnfwd.c
@@ -116,8 +116,8 @@ gx_device_forward_fill_in_procs(register gx_device_forward * dev)
fill_dev_proc(dev, get_profile, gx_forward_get_profile);
fill_dev_proc(dev, set_graphics_type_tag, gx_forward_set_graphics_type_tag);
fill_dev_proc(dev, strip_copy_rop2, gx_forward_strip_copy_rop2);
- fill_dev_proc(dev, strip_tile_rect_devn, gx_forward_strip_tile_rect_devn);
- fill_dev_proc(dev, transform_pixel_region, gx_forward_transform_pixel_region);
+ fill_dev_proc(dev, strip_tile_rect_devn, gx_forward_strip_tile_rect_devn);
+ fill_dev_proc(dev, transform_pixel_region, gx_forward_transform_pixel_region);
gx_device_fill_in_procs((gx_device *) dev);
}
@@ -612,17 +612,17 @@ gx_forward_strip_copy_rop2(gx_device * dev, const byte * sdata, int sourcex,
int
gx_forward_strip_tile_rect_devn(gx_device * dev, const gx_strip_bitmap * tiles,
- int x, int y, int w, int h, const gx_drawing_color * pdcolor0,
+ int x, int y, int w, int h, const gx_drawing_color * pdcolor0,
const gx_drawing_color * pdcolor1, int px, int py)
{
gx_device_forward * const fdev = (gx_device_forward *)dev;
gx_device *tdev = fdev->target;
if (tdev == 0)
- return gx_default_strip_tile_rect_devn(dev, tiles, x, y, w, h, pdcolor0,
+ return gx_default_strip_tile_rect_devn(dev, tiles, x, y, w, h, pdcolor0,
pdcolor1, px, py);
else
- return dev_proc(tdev, strip_tile_rect_devn)(tdev, tiles, x, y, w, h,
+ return dev_proc(tdev, strip_tile_rect_devn)(tdev, tiles, x, y, w, h,
pdcolor0, pdcolor1, px, py);
}
@@ -1038,7 +1038,7 @@ gx_forward_transform_pixel_region(gx_device *pdev, transform_pixel_region_reason
if (tdev != 0)
return dev_proc(tdev, transform_pixel_region)(tdev, reason, data);
else
- return gx_default_transform_pixel_region(tdev, reason, data);
+ return gx_default_transform_pixel_region(pdev, reason, data);
}
/* ---------------- The null device(s) ---------_plane_index------- */
@@ -1304,7 +1304,7 @@ null_strip_copy_rop2(gx_device * dev, const byte * sdata, int sourcex,
static int
null_strip_tile_rect_devn(gx_device * dev, const gx_strip_bitmap * tiles,
- int x, int y, int w, int h, const gx_drawing_color * pdcolor0,
+ int x, int y, int w, int h, const gx_drawing_color * pdcolor0,
const gx_drawing_color * pdcolor1, int px, int py)
{
return 0;