Front page | perl.perl5.porters |
Postings from August 2001
RE: [PATCH] [ID 20000519.006] Malloc coredump madness - try#2
From:
Wilson, Doug
Date:
August 24, 2001 10:34
Subject:
RE: [PATCH] [ID 20000519.006] Malloc coredump madness - try#2
Message ID:
35A280DF784CD411A06B0008C7B130ADB5511C@sdex04.sd.intuit.com
With the understanding that this is still wide open for
review...
I was poking about the source code some more, realized that
some people might actually use 64bit integers :), and that
you can get in trouble whenever you do math within a New()
statement, and thought this might be better (you could also
roll the HAS_64K_LIMIT check into here, or would that be going
too far?):
--- handy.orig Fri Aug 24 09:30:59 2001
+++ handy.h Fri Aug 24 09:56:12 2001
@@ -202,6 +202,12 @@
#endif
+#ifdef USE_64_BIT_ALL
+# define MEM_SIZE_MAX IV_MAX
+#else
+# define MEM_SIZE_MAX I32_MAX
+#endif
+
/* log(2) is pretty close to 0.30103, just in case anyone is grepping for
it */
#define BIT_DIGITS(N) (((N)*146)/485 + 1) /* log2(10) =~ 146/485 */
#define TYPE_DIGITS(T) BIT_DIGITS(sizeof(T) * 8)
@@ -575,14 +581,22 @@
#ifndef LEAKTEST
-#define New(x,v,n,t) (v = (t*)safemalloc((MEM_SIZE)((n)*sizeof(t))))
-#define Newc(x,v,n,t,c) (v =
(c*)safemalloc((MEM_SIZE)((n)*sizeof(t))))
-#define Newz(x,v,n,t) (v = (t*)safemalloc((MEM_SIZE)((n)*sizeof(t)))), \
- memzero((char*)(v), (n)*sizeof(t))
-#define Renew(v,n,t) \
- (v = (t*)saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t))))
-#define Renewc(v,n,t,c) \
- (v = (c*)saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t))))
+#define New(x,v,n,t) ((((n) < 0) || ((n) > (MEM_SIZE_MAX/sizeof(t)))) \
+ ? (Perl_croak_nocontext("panic: malloc"), v) \
+ : (v = (t*)safemalloc((MEM_SIZE)((n)*sizeof(t)))))
+#define Newc(x,v,n,t,c) ((((n) < 0) || ((n) > (MEM_SIZE_MAX/sizeof(t)))) \
+ ? (Perl_croak_nocontext("panic: malloc"), v) \
+ : (v = (c*)safemalloc((MEM_SIZE)((n)*sizeof(t)))))
+#define Newz(x,v,n,t) ((((n) < 0) || ((n) > (MEM_SIZE_MAX/sizeof(t)))) \
+ ? (Perl_croak_nocontext("panic: malloc"), v) \
+ : ((v = (t*)safemalloc((MEM_SIZE)((n)*sizeof(t)))), \
+ memzero((char*)(v), (n)*sizeof(t))))
+#define Renew(v,n,t) ((((n) < 0) || ((n) > (MEM_SIZE_MAX/sizeof(t)))) \
+ ? (Perl_croak_nocontext("panic: malloc"), v) \
+ : (v = (t*)saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t)))))
+#define Renewc(v,n,t,c) ((((n) < 0) || ((n) > (MEM_SIZE_MAX/sizeof(t)))) \
+ ? (Perl_croak_nocontext("panic: malloc"), v) \
+ : (v = (c*)saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t)))))
#define Safefree(d) safefree((Malloc_t)(d))
#else /* LEAKTEST */
-
RE: [PATCH] [ID 20000519.006] Malloc coredump madness - try#2
by Wilson, Doug