diff options
Diffstat (limited to 'Build/source/libs/gd/libgd-src/src/gd_wbmp.c')
-rw-r--r-- | Build/source/libs/gd/libgd-src/src/gd_wbmp.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/Build/source/libs/gd/libgd-src/src/gd_wbmp.c b/Build/source/libs/gd/libgd-src/src/gd_wbmp.c index 0028273d656..a49bdbecbb1 100644 --- a/Build/source/libs/gd/libgd-src/src/gd_wbmp.c +++ b/Build/source/libs/gd/libgd-src/src/gd_wbmp.c @@ -88,6 +88,8 @@ int gd_getin(void *in) return (gdGetC((gdIOCtx *)in)); } +static int _gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out); + /* Function: gdImageWBMPCtx @@ -101,13 +103,19 @@ int gd_getin(void *in) */ BGD_DECLARE(void) gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out) { + _gdImageWBMPCtx(image, fg, out); +} + +/* returns 0 on success, 1 on failure */ +static int _gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out) +{ int x, y, pos; Wbmp *wbmp; /* create the WBMP */ if((wbmp = createwbmp(gdImageSX(image), gdImageSY(image), WBMP_WHITE)) == NULL) { gd_error("Could not create WBMP\n"); - return; + return 1; } /* fill up the WBMP structure */ @@ -123,18 +131,22 @@ BGD_DECLARE(void) gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out) /* write the WBMP to a gd file descriptor */ if(writewbmp(wbmp, &gd_putout, out)) { + freewbmp(wbmp); gd_error("Could not save WBMP\n"); + return 1; } /* des submitted this bugfix: gdFree the memory. */ freewbmp(wbmp); + + return 0; } /* Function: gdImageCreateFromWBMPCtx Reads in a WBMP image via a <gdIOCtx> struct. See - <gdImageCreateFromWBMP>. + <gdImageCreateFromWBMP>. */ BGD_DECLARE(gdImagePtr) gdImageCreateFromWBMPCtx(gdIOCtx *infile) { @@ -271,8 +283,11 @@ BGD_DECLARE(void *) gdImageWBMPPtr(gdImagePtr im, int *size, int fg) void *rv; gdIOCtx *out = gdNewDynamicCtx(2048, NULL); if (out == NULL) return NULL; - gdImageWBMPCtx(im, fg, out); - rv = gdDPExtractData(out, size); + if (!_gdImageWBMPCtx(im, fg, out)) { + rv = gdDPExtractData(out, size); + } else { + rv = NULL; + } out->gd_free(out); return rv; } |