develooper Front page | perl.perl5.porters | Postings from August 2001

[PATCH] [ID 20000519.006] Malloc coredump madness

From:
Wilson, Doug
Date:
August 23, 2001 19:31
Subject:
[PATCH] [ID 20000519.006] Malloc coredump madness
Message ID:
35A280DF784CD411A06B0008C7B130ADB55119@sdex04.sd.intuit.com

Well, I caught one of my own mistakes on my last post, so
here is an actual patch for review.

Whether or not the
first patch to handy.h is applied, please apply the second
patch to AUTHORS (this is a temp gig, no point in documenting
this address), thanks.

Is my_exit() the right thing to call. Is this any better than
letting perl core dump? 'Out of memory!' is a fatal error, we
could trap this and call something nicer (Perl_croak?).

--- handy.orig  Thu Aug 23 18:20:19 2001
+++ handy.h     Thu Aug 23 18:57:59 2001
@@ -575,14 +575,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) > (I32_MAX/sizeof(t))) \
+    ? (PerlIO_puts(Perl_error_log,PL_no_mem), my_exit(1), v) \
+    : (v = (t*)safemalloc((MEM_SIZE)((n)*sizeof(t)))))
+#define Newc(x,v,n,t,c) (((n) > (I32_MAX/sizeof(t))) \
+    ? (PerlIO_puts(Perl_error_log,PL_no_mem), my_exit(1), v) \
+    : (v = (c*)safemalloc((MEM_SIZE)((n)*sizeof(t)))))
+#define Newz(x,v,n,t)  (((n) > (I32_MAX/sizeof(t))) \
+    ? (PerlIO_puts(Perl_error_log,PL_no_mem), my_exit(1), v) \
+    : ((v = (t*)safemalloc((MEM_SIZE)((n)*sizeof(t)))), \
+       memzero((char*)(v), (n)*sizeof(t))))
+#define Renew(v,n,t)   (((n) > (I32_MAX/sizeof(t))) \
+    ? (PerlIO_puts(Perl_error_log,PL_no_mem), my_exit(1), v) \
+    : (v = (t*)saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t)))))
+#define Renewc(v,n,t,c) (((n) > (I32_MAX/sizeof(t))) \
+    ? (PerlIO_puts(Perl_error_log,PL_no_mem), my_exit(1), v) \
+    : (v = (c*)saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t)))))
 #define Safefree(d)    safefree((Malloc_t)(d))
 
 #else /* LEAKTEST */

####################################################################

--- AUTHORS.orig        Thu Aug 23 18:42:01 2001
+++ AUTHORS     Thu Aug 23 18:42:40 2001
@@ -159,7 +159,7 @@
 Dominique Dumont               <Dominique_Dumont@grenoble.hp.com>
 Doug Campbell                  <soup@ampersand.com>
 Doug MacEachern                <dougm@covalent.net>
-Doug Wilson                    <Doug_Wilson@intuit.com>
+Douglas Wilson                 <dougw@cpan.org>
 Douglas E. Wegscheid           <dwegscheid@qtm.net>
 Douglas Lankshear              <dougl@activestate.com>
 Dov Grobgeld                   <dov@Orbotech.Co.IL>



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About