]> granicus.if.org Git - strace/commitdiff
2007-09-25 Dmitry V. Levin <ldv@altlinux.org>
authorDmitry V. Levin <ldv@altlinux.org>
Mon, 8 Oct 2007 21:04:41 +0000 (21:04 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Mon, 8 Oct 2007 21:04:41 +0000 (21:04 +0000)
* strace (main): Use calloc for tcbtab allocation.
Check calloc return value.
Reported by Bai Weidong.

ChangeLog
strace.c

index 83cd896e0f62a193d9f7b24a55ae303f17204873..9897d4b88c7ef366ff00e11d4cab443d1d6a50f8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-09-25  Dmitry V. Levin <ldv@altlinux.org>
+
+       * strace (main): Use calloc for tcbtab allocation.
+       Check calloc return value.
+       Reported by Bai Weidong.
+
 2007-09-11  Roland McGrath  <roland@redhat.com>
 
        * linux/sparc/syscall.h: Add missing decls.
index e3463105e9377275dcf92912fb78847365f31982..9d82f586eaccd34c328d872795253170114845da 100644 (file)
--- a/strace.c
+++ b/strace.c
@@ -616,9 +616,7 @@ startup_child (char **argv)
 }
 
 int
-main(argc, argv)
-int argc;
-char *argv[];
+main(int argc, char *argv[])
 {
        extern int optind;
        extern char *optarg;
@@ -628,14 +626,21 @@ char *argv[];
 
        static char buf[BUFSIZ];
 
+       progname = argv[0] ? argv[0] : "strace";
+
        /* Allocate the initial tcbtab.  */
        tcbtabsize = argc;      /* Surely enough for all -p args.  */
-       tcbtab = (struct tcb **) malloc (tcbtabsize * sizeof tcbtab[0]);
-       tcbtab[0] = (struct tcb *) calloc (tcbtabsize, sizeof *tcbtab[0]);
+       if ((tcbtab = calloc (tcbtabsize, sizeof tcbtab[0])) == NULL) {
+               fprintf(stderr, "%s: out of memory\n", progname);
+               exit(1);
+       }
+       if ((tcbtab[0] = calloc (tcbtabsize, sizeof tcbtab[0][0])) == NULL) {
+               fprintf(stderr, "%s: out of memory\n", progname);
+               exit(1);
+       }
        for (tcp = tcbtab[0]; tcp < &tcbtab[0][tcbtabsize]; ++tcp)
                tcbtab[tcp - tcbtab[0]] = &tcbtab[0][tcp - tcbtab[0]];
 
-       progname = argv[0];
        outf = stderr;
        interactive = 1;
        set_sortby(DEFAULT_SORTBY);