about summary refs log tree commit diff
diff options
context:
space:
mode:
authorgiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2023-08-24 21:40:32 +0000
committergiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2023-08-24 21:40:32 +0000
commit13360c93975be772b2805a8bc445c5b8cd63d95d (patch)
tree7817128a2031b7e69350f5566a4a264244f3409e
parentb5b6c2d5e1cdd9db1f360ea057b822e7bdb948ee (diff)
downloadnetpbm-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.c18
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);
 }