diff options
-rw-r--r-- | base/gximage1.c | 5 | ||||
-rw-r--r-- | base/gximage4.c | 4 | ||||
-rw-r--r-- | base/gxipixel.c | 2 |
3 files changed, 10 insertions, 1 deletions
diff --git a/base/gximage1.c b/base/gximage1.c index a1ee9e2c9..a773944c8 100644 --- a/base/gximage1.c +++ b/base/gximage1.c @@ -85,7 +85,6 @@ gx_begin_image1(gx_device * dev, if (code < 0) return code; - memset(penum, 0, sizeof(gx_image_enum)); /* in case of failure, no dangling pointers */ penum->alpha = pim->Alpha; penum->use_mask_color = false; penum->image_parent_type = pim->image_parent_type; @@ -96,6 +95,10 @@ gx_begin_image1(gx_device * dev, penum); if (code >= 0) *pinfo = (gx_image_enum_common_t *)penum; + else { + gs_free_object(mem, penum, "gx_begin_image1"); + *pinfo = NULL; + } return code; } diff --git a/base/gximage4.c b/base/gximage4.c index 8a65e17e7..422cd06f7 100644 --- a/base/gximage4.c +++ b/base/gximage4.c @@ -108,6 +108,10 @@ gx_begin_image4(gx_device * dev, penum); if (code >= 0) *pinfo = (gx_image_enum_common_t *)penum; + else { + gs_free_object(mem, penum, "gx_begin_image4"); + *pinfo = NULL; + } return code; } diff --git a/base/gxipixel.c b/base/gxipixel.c index 6f27ba650..c41d3b885 100644 --- a/base/gxipixel.c +++ b/base/gxipixel.c @@ -174,10 +174,12 @@ gx_image_enum_alloc(const gs_image_common_t * pic, ) return_error(gs_error_rangecheck); } + *ppenum = NULL; /* in case alloc fails and caller doesn't check code */ penum = gs_alloc_struct(mem, gx_image_enum, &st_gx_image_enum, "gx_default_begin_image"); if (penum == 0) return_error(gs_error_VMerror); + memset(penum, 0, sizeof(gx_image_enum)); /* in case of failure, no dangling pointers */ if (prect) { penum->rect.x = prect->p.x; penum->rect.y = prect->p.y; |