[poppler] goo/gmem.cc goo/gmem.h

Albert Astals Cid aacid at kemper.freedesktop.org
Mon Oct 22 12:59:58 PDT 2007


 goo/gmem.cc |   18 ++++++++++++++++++
 goo/gmem.h  |    3 +++
 2 files changed, 21 insertions(+)

New commits:
commit cf785cd12ae77e8dd778ed043584f8f26efe675f
Author: Albert Astals Cid <tsdgeos at bluebox.localdomain>
Date:   Mon Oct 22 21:59:35 2007 +0200

    Add gmallocn_checkoverflow, it's the same as gmallocn but returns NULL on overflow instead of doing exit()

diff --git a/goo/gmem.cc b/goo/gmem.cc
index f1f8f5f..3dce8ea 100644
--- a/goo/gmem.cc
+++ b/goo/gmem.cc
@@ -172,6 +172,24 @@ void *gmallocn(int nObjs, int objSize) GMEM_EXCEP {
   return gmalloc(n);
 }
 
+void *gmallocn_checkoverflow(int nObjs, int objSize) GMEM_EXCEP {
+  int n;
+
+  if (nObjs == 0) {
+    return NULL;
+  }
+  n = nObjs * objSize;
+  if (objSize <= 0 || nObjs < 0 || nObjs >= INT_MAX / objSize) {
+#if USE_EXCEPTIONS
+    throw GMemException();
+#else
+    fprintf(stderr, "Bogus memory allocation size\n");
+    return NULL;
+#endif
+  }
+  return gmalloc(n);
+}
+
 void *greallocn(void *p, int nObjs, int objSize) GMEM_EXCEP {
   int n;
 
diff --git a/goo/gmem.h b/goo/gmem.h
index ebe1455..39c2334 100644
--- a/goo/gmem.h
+++ b/goo/gmem.h
@@ -49,8 +49,11 @@ extern void *grealloc(void *p, size_t size) GMEM_EXCEP;
  * and size.  The result is similar to allocating nObjs * objSize
  * bytes, but there is an additional error check that the total size
  * doesn't overflow an int.
+ * The gmallocn_checkoverflow variant returns NULL instead of exiting
+ * the application if a overflow is detected
  */
 extern void *gmallocn(int nObjs, int objSize) GMEM_EXCEP;
+extern void *gmallocn_checkoverflow(int nObjs, int objSize) GMEM_EXCEP;
 extern void *greallocn(void *p, int nObjs, int objSize) GMEM_EXCEP;
 
 /*


More information about the poppler mailing list