diff options
author | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2023-08-24 21:40:32 +0000 |
---|---|---|
committer | giraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8> | 2023-08-24 21:40:32 +0000 |
commit | 13360c93975be772b2805a8bc445c5b8cd63d95d (patch) | |
tree | 7817128a2031b7e69350f5566a4a264244f3409e | |
parent | b5b6c2d5e1cdd9db1f360ea057b822e7bdb948ee (diff) | |
download | netpbm-mirror-13360c93975be772b2805a8bc445c5b8cd63d95d.tar.gz netpbm-mirror-13360c93975be772b2805a8bc445c5b8cd63d95d.tar.xz netpbm-mirror-13360c93975be772b2805a8bc445c5b8cd63d95d.zip |
Clean up - don't use libjpeg's memory allocator
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@4612 9d0c8265-081b-0410-96cb-a4ca84ce46f8
-rw-r--r-- | converter/other/jpegtopnm.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/converter/other/jpegtopnm.c b/converter/other/jpegtopnm.c index 7d1750a7..518d80ac 100644 --- a/converter/other/jpegtopnm.c +++ b/converter/other/jpegtopnm.c @@ -827,11 +827,17 @@ convertRaster(struct jpeg_decompress_struct * const cinfoP, xel * pnmbuffer; /* Output buffer */ - jpegbuffer = ((*cinfoP->mem->alloc_sarray) - ((j_common_ptr) cinfoP, JPOOL_IMAGE, - cinfoP->output_width * cinfoP->output_components, - (JDIMENSION) 1) - )[0]; + if (cinfoP->output_width > UINT_MAX/cinfoP->output_components) + pm_error("Image is too wide (%u columns) for computations", + cinfoP->output_width); + + MALLOCARRAY(jpegbuffer, + cinfoP->output_width * cinfoP->output_components); + + if (!jpegbuffer) + pm_error("Failed to allocated a buffer for a row of %u columns " + "of %u samples each", + cinfoP->output_width, cinfoP->output_components); pnmbuffer = pnm_allocrow(cinfoP->output_width); @@ -846,6 +852,8 @@ convertRaster(struct jpeg_decompress_struct * const cinfoP, maxval, format, false); } } + + free(jpegbuffer); pnm_freerow(pnmbuffer); } |