]> granicus.if.org Git - openjpeg/commitdiff
[trunk] Import left over from patch submitted as issue 225 (comment #14)
authorMathieu Malaterre <mathieu.malaterre@gmail.com>
Mon, 3 Mar 2014 11:48:27 +0000 (11:48 +0000)
committerMathieu Malaterre <mathieu.malaterre@gmail.com>
Mon, 3 Mar 2014 11:48:27 +0000 (11:48 +0000)
Update issue 225

src/lib/openjp2/opj_malloc.h

index aef2ee3b8c96542fe43ffcca5ed14d3a2ad6d80c..95ad14727ca35ea42a47c23d033374991c99aca6 100644 (file)
@@ -48,8 +48,13 @@ Allocate an uninitialized memory block
 #ifdef ALLOC_PERF_OPT
 void * OPJ_CALLCONV opj_malloc(size_t size);
 #else
+/* prevent assertion on overflow for MSVC */
+#ifdef _MSC_VER
+#define opj_malloc(size) ((size_t)(size) >= (size_t)-0x100 ? NULL : malloc(size))
+#else
 #define opj_malloc(size) malloc(size)
 #endif
+#endif
 
 /**
 Allocate a memory block with elements initialized to 0
@@ -60,8 +65,13 @@ Allocate a memory block with elements initialized to 0
 #ifdef ALLOC_PERF_OPT
 void * OPJ_CALLCONV opj_calloc(size_t _NumOfElements, size_t _SizeOfElements);
 #else
+/* prevent assertion on overflow for MSVC */
+#ifdef _MSC_VER
+#define opj_calloc(num, size) ((size_t)(num) != 0 && (size_t)(num) >= (size_t)-0x100 / (size_t)(size) ? NULL : calloc(num, size))
+#else
 #define opj_calloc(num, size) calloc(num, size)
 #endif
+#endif
 
 /**
 Allocate memory aligned to a 16 byte boundry
@@ -139,8 +149,13 @@ Reallocate memory blocks.
 #ifdef ALLOC_PERF_OPT
 void * OPJ_CALLCONV opj_realloc(void * m, size_t s);
 #else
+/* prevent assertion on overflow for MSVC */
+#ifdef _MSC_VER
+#define opj_realloc(m, s) ((size_t)(s) >= (size_t)-0x100 ? NULL : realloc(m, s))
+#else
 #define opj_realloc(m, s) realloc(m, s)
 #endif
+#endif
 
 /**
 Deallocates or frees a memory block.