diff options
author | Ken Sharp <ken.sharp@artifex.com> | 2018-11-17 09:37:07 +0000 |
---|---|---|
committer | Chris Liddell <chris.liddell@artifex.com> | 2018-11-19 09:50:00 +0000 |
commit | c69827c308b608719d786fc14c8518af4dd6b335 (patch) | |
tree | c8b6008296fb1641f06d85c9fb8caaf209188e75 | |
parent | 4548ceaf5ada7f7a4c4da5907e27fec62c1ce63d (diff) | |
download | ghostpdl-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.c | 14 |
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; |