summaryrefslogtreecommitdiff
path: root/graphics/jasper/files/patch-jas_malloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/jasper/files/patch-jas_malloc.c')
-rw-r--r--graphics/jasper/files/patch-jas_malloc.c70
1 files changed, 70 insertions, 0 deletions
diff --git a/graphics/jasper/files/patch-jas_malloc.c b/graphics/jasper/files/patch-jas_malloc.c
new file mode 100644
index 000000000000..057d1afce4c6
--- /dev/null
+++ b/graphics/jasper/files/patch-jas_malloc.c
@@ -0,0 +1,70 @@
+--- src/libjasper/base/jas_malloc.c.orig 2007-01-19 22:43:05.000000000 +0100
++++ src/libjasper/base/jas_malloc.c 2013-04-17 22:43:09.000000000 +0200
+@@ -76,6 +76,9 @@
+
+ /* We need the prototype for memset. */
+ #include <string.h>
++#include <limits.h>
++#include <errno.h>
++#include <stdint.h>
+
+ #include "jasper/jas_malloc.h"
+
+@@ -113,19 +116,51 @@
+
+ void *jas_realloc(void *ptr, size_t size)
+ {
+- return realloc(ptr, size);
++ return ptr ? realloc(ptr, size) : malloc(size);
+ }
+
+ void *jas_calloc(size_t nmemb, size_t size)
+ {
+ void *ptr;
++
++ ptr = jas_malloc2(nmemb, size);
++ if (ptr)
++ memset(ptr, 0, nmemb*size);
++ return ptr;
++}
++
++void *jas_realloc2(void *ptr, size_t nmemb, size_t size)
++{
++ if (!ptr)
++ return jas_malloc2(nmemb, size);
++ if (nmemb && SIZE_MAX / nmemb < size) {
++ errno = ENOMEM;
++ return NULL;
++ }
++ return jas_realloc(ptr, nmemb * size);
++
++}
++
++void *jas_malloc2(size_t nmemb, size_t size)
++{
++ if (nmemb && SIZE_MAX / nmemb < size) {
++ errno = ENOMEM;
++ return NULL;
++ }
++
++ return jas_malloc(nmemb * size);
++}
++
++void *jas_malloc3(size_t a, size_t b, size_t c)
++{
+ size_t n;
+- n = nmemb * size;
+- if (!(ptr = jas_malloc(n * sizeof(char)))) {
+- return 0;
++
++ if (a && SIZE_MAX / a < b) {
++ errno = ENOMEM;
++ return NULL;
+ }
+- memset(ptr, 0, n);
+- return ptr;
++
++ return jas_malloc2(a*b, c);
+ }
+
+ #endif