diff -rup /local/src/hurd.orig/sutils/ChangeLog hurd/sutils/ChangeLog --- /local/src/hurd.orig/sutils/ChangeLog Wed Apr 25 13:38:23 2001 +++ hurd/sutils/ChangeLog Wed Aug 22 01:23:06 2001 @@ -1,3 +1,7 @@ +2001-08-22 Igor Khavkine + + * fstab.c (fstab_argp_create): Check return value of malloc(). + 2001-02-27 Roland McGrath Use a new, more flexible RPC interface to the default pager. diff -rup /local/src/hurd.orig/sutils/fstab.c hurd/sutils/fstab.c --- /local/src/hurd.orig/sutils/fstab.c Wed Apr 25 13:38:23 2001 +++ hurd/sutils/fstab.c Tue Aug 21 21:30:49 2001 @@ -912,8 +912,12 @@ fstab_argp_create (struct fstab_argp_par else { struct fstype *newtype = malloc (sizeof *newtype); + if (!newtype) + error (107, errno, "malloc"); newtype->name = strdup (type->name); newtype->program = strdup (type->program); + if (!newtype->name || !newtype->program) + error (107, errno, "strdup"); newtype->next = wanttypes->entries; wanttypes->entries = newtype; } @@ -951,7 +955,7 @@ fstab_argp_create (struct fstab_argp_par err = fstab_add_fs (check, fs, 0); if (err) - error (107, err, "fstab_add_fs"); + error (108, err, "fstab_add_fs"); } /* fstab_free (fstab); XXX */ diff -rup /local/src/hurd.orig/term/ChangeLog hurd/term/ChangeLog --- /local/src/hurd.orig/term/ChangeLog Wed Jul 25 01:50:00 2001 +++ hurd/term/ChangeLog Wed Aug 22 01:25:56 2001 @@ -1,3 +1,8 @@ +2001-08-22 Igor Khavkine + + * munge.c (reallocate_queue): Check return value of malloc(). + * users.c (S_term_open_ctty, trivfs_S_io_async): Likewise. + 2001-04-01 Neal H Walfield * users.c (S_termctty_open_terminal): Use iohelp_create_empty_iouser. diff -rup /local/src/hurd.orig/term/munge.c hurd/term/munge.c --- /local/src/hurd.orig/term/munge.c Mon Mar 1 09:28:16 1999 +++ hurd/term/munge.c Tue Aug 21 23:12:14 2001 @@ -749,6 +749,8 @@ reallocate_queue (struct queue *q) /* Make the queue twice as large. */ newq = malloc (sizeof (struct queue) + q->arraylen * 2 * sizeof (quoted_char)); + assert (newq); + newq->susp = q->susp; newq->lowat = q->lowat; newq->hiwat = q->hiwat; diff -rup /local/src/hurd.orig/term/users.c hurd/term/users.c --- /local/src/hurd.orig/term/users.c Wed Jul 25 01:50:00 2001 +++ hurd/term/users.c Tue Aug 21 21:34:34 2001 @@ -436,6 +436,11 @@ S_term_open_ctty (mach_port_t arg, if (!err) { struct protid_hook *hook = malloc (sizeof (struct protid_hook)); + if (!hook) + { + ports_port_deref (cred); + return ENOMEM; + } hook->pid = pid; hook->pgrp = pgrp; @@ -1985,6 +1990,11 @@ trivfs_S_io_async (struct trivfs_protid return EBADF; } ar = malloc (sizeof (struct async_req)); + if (!ar) + { + mutex_unlock (&global_lock); + return ENOMEM; + } ar->notify = notify; ar->next = async_requests; async_requests = ar; diff -rup /local/src/hurd.orig/trans/ChangeLog hurd/trans/ChangeLog --- /local/src/hurd.orig/trans/ChangeLog Wed Jul 25 01:50:00 2001 +++ hurd/trans/ChangeLog Wed Aug 22 01:28:09 2001 @@ -1,3 +1,10 @@ +2001-08-22 Igor Khavkine + + * new-fifo.c (fifo_trans_create): Change prototype to be able + to propagate errors. Check return value of malloc(). + * new-fifo.c (main, trivfs_S_fsys_forward): Adjusted to new + prototype of fifo_trans_create(). + 2001-04-01 Neal H Walfield * magic.c (trivfs_S_dir_lookup): Use iohelp_dup_iouser diff -rup /local/src/hurd.orig/trans/new-fifo.c hurd/trans/new-fifo.c --- /local/src/hurd.orig/trans/new-fifo.c Wed Apr 25 13:38:23 2001 +++ hurd/trans/new-fifo.c Tue Aug 21 23:19:34 2001 @@ -92,10 +92,15 @@ struct fifo_trans /* Return a new FIFO_TRANS in TRANS, initializing it from FROM if it's non-null, where possible. */ -static void +static error_t fifo_trans_create (struct fifo_trans *from, struct fifo_trans **trans) { struct fifo_trans *new = malloc (sizeof (struct fifo_trans)); + if (!new) + { + *trans = NULL; + return ENOMEM; + } new->server = 0; mutex_init (&new->active_fifo_lock); @@ -123,6 +128,7 @@ fifo_trans_create (struct fifo_trans *fr } *trans = new; + return 0; } static void @@ -194,7 +200,8 @@ main (int argc, char **argv) trivfs_clean_cntl (fsys); } - fifo_trans_create (0, &trans); + err = fifo_trans_create (0, &trans); + assert_perror (err); if (fifo_trans_parse_args (trans, argc, argv, 1) != 0) exit (1); @@ -805,7 +812,12 @@ trivfs_S_fsys_forward (mach_port_t serve argz_extract (argz, argz_len, argv); /* Make a new translator, inheriting from its server. */ - fifo_trans_create (server_trans, &trans); + err = fifo_trans_create (server_trans, &trans); + if (err) + { + ports_port_deref (cred); + return err; + } /* Parse the new arguments to change the defaults. */ err = fifo_trans_parse_args (trans, argc, argv, 0); diff -rup /local/src/hurd.orig/ufs/ChangeLog hurd/ufs/ChangeLog --- /local/src/hurd.orig/ufs/ChangeLog Wed Jul 25 01:50:01 2001 +++ hurd/ufs/ChangeLog Wed Aug 22 01:35:42 2001 @@ -1,3 +1,22 @@ +2001-08-22 Igor Khavkine + + * alloc.c (read_cg): Check return value of malloc(). Changed + bcopy() to memcpy(). + * bmap.c (mark_indir_dirty): Changed prototype to be able to + propagate errors. Check return value of malloc(). + * dir.c (dirscanblock): Check return value of malloc() and + realloc(). + * hyper.c (get_hypermetadata): Check return value of malloc(). + * inode.c (diskfs_cached_lookup, diskfs_get_translator): Likewise. + * pager.c (pager_unlock_page): Adjusted to new prototype of + mark_indir_dirty(). + * pager.c (create_disk_pager, diskfs_get_filemap): Check return + value of malloc(). + * pokeloc.c (record_poke): Check return value of malloc(). + * sizes.c (diskfs_grow): Adjusted to new prototype of + mark_indir_dirty(). + * ufs.h: Changed prototype for mark_indir_dirty(). + 2001-06-09 Mark Kettenis * inode.c (diskfs_set_statfs): If number of free blocks is less diff -rup /local/src/hurd.orig/ufs/alloc.c hurd/ufs/alloc.c --- /local/src/hurd.orig/ufs/alloc.c Sun Dec 20 15:51:02 1998 +++ hurd/ufs/alloc.c Wed Aug 22 00:31:12 2001 @@ -56,6 +56,7 @@ the Free Software Foundation, 675 Mass A #include "ufs.h" #include #include +#include /* These don't work *at all* here; don't even try setting them. */ @@ -180,7 +181,9 @@ read_cg (int cg, struct cg **cgpp) if (swab_disk) { *cgpp = malloc (sblock->fs_cgsize); - bcopy (diskcg, *cgpp, sblock->fs_cgsize); + assert (*cgpp); + + memcpy (*cgpp, diskcg, sblock->fs_cgsize); swab_cg (*cgpp); return 1; } diff -rup /local/src/hurd.orig/ufs/bmap.c hurd/ufs/bmap.c --- /local/src/hurd.orig/ufs/bmap.c Tue Apr 23 14:09:23 1996 +++ hurd/ufs/bmap.c Tue Aug 21 23:28:42 2001 @@ -103,7 +103,7 @@ fetch_indir_spec (struct node *np, volat /* Mark indirect block BNO as dirty on node NP's list. NP must be locked. */ -void +error_t mark_indir_dirty (struct node *np, daddr_t bno) { struct dirty_indir *d; @@ -113,8 +113,12 @@ mark_indir_dirty (struct node *np, daddr return; d = malloc (sizeof (struct dirty_indir)); + if (!d) + return ENOMEM; + d->bno = bno; d->next = np->dn->dirty; np->dn->dirty = d; + return 0; } diff -rup /local/src/hurd.orig/ufs/dir.c hurd/ufs/dir.c --- /local/src/hurd.orig/ufs/dir.c Wed Apr 25 13:38:24 2001 +++ hurd/ufs/dir.c Tue Aug 21 23:34:11 2001 @@ -454,6 +454,9 @@ dirscanblock (vm_address_t blockaddr, st { dp->dn->dirents = malloc ((dp->dn_stat.st_size / DIRBLKSIZ) * sizeof (int)); + if (! dp->dn->dirents) + return ENOMEM; + for (i = 0; i < dp->dn_stat.st_size/DIRBLKSIZ; i++) dp->dn->dirents[i] = -1; } @@ -630,9 +633,14 @@ diskfs_direnter_hard(struct node *dp, anything at all. */ if (dp->dn->dirents) { - dp->dn->dirents = realloc (dp->dn->dirents, + int new_dirents; + new_dirents = realloc (dp->dn->dirents, (dp->dn_stat.st_size / DIRBLKSIZ * sizeof (int))); + if (! new_dirents) + return ENOMEM; + + dp->dn->dirents = new_dirents; for (i = oldsize / DIRBLKSIZ; i < dp->dn_stat.st_size / DIRBLKSIZ; i++) @@ -644,6 +652,9 @@ diskfs_direnter_hard(struct node *dp, { dp->dn->dirents = malloc (dp->dn_stat.st_size / DIRBLKSIZ * sizeof (int)); + if (! dp->dn->dirents) + return ENOMEM; + for (i = 0; i < dp->dn_stat.st_size / DIRBLKSIZ; i++) dp->dn->dirents[i] = -1; dp->dn->dirents[ds->idx] = 1; diff -rup /local/src/hurd.orig/ufs/hyper.c hurd/ufs/hyper.c --- /local/src/hurd.orig/ufs/hyper.c Wed Apr 25 13:38:24 2001 +++ hurd/ufs/hyper.c Tue Aug 21 23:38:43 2001 @@ -135,6 +135,8 @@ get_hypermetadata (void) if (!sblock) sblock = malloc (SBSIZE); + if (!sblock) + assert_perror (errno); /* Free previous values. */ if (zeroblock) @@ -238,6 +240,8 @@ get_hypermetadata (void) csum = malloc (fsaddr (sblock, howmany (sblock->fs_cssize, sblock->fs_fsize))); + if (!csum) + assert_perror (errno); assert (!diskfs_catch_exception ()); bcopy (disk_image + fsaddr (sblock, sblock->fs_csaddr), diff -rup /local/src/hurd.orig/ufs/inode.c hurd/ufs/inode.c --- /local/src/hurd.orig/ufs/inode.c Wed Jul 25 01:50:01 2001 +++ hurd/ufs/inode.c Tue Aug 21 23:42:54 2001 @@ -67,6 +67,12 @@ diskfs_cached_lookup (int inum, struct n } dn = malloc (sizeof (struct disknode)); + if (!dn) + { + spin_unlock (&diskfs_node_refcnt_lock); + *npp = NULL; + return ENOMEM; + } dn->number = inum; dn->dirents = 0; @@ -614,6 +620,10 @@ diskfs_get_translator (struct node *np, datalen = *(u_int *)transloc; *namep = malloc (datalen); + if (! *namep) + return ENOMEM; + + memcpy (*namep, transloc + sizeof (u_int), datalen); bcopy (transloc + sizeof (u_int), *namep, datalen); diskfs_end_catch_exception (); diff -rup /local/src/hurd.orig/ufs/pager.c hurd/ufs/pager.c --- /local/src/hurd.orig/ufs/pager.c Mon Sep 13 02:35:07 1999 +++ hurd/ufs/pager.c Tue Aug 21 23:45:12 2001 @@ -19,6 +19,7 @@ #include #include #include +#include #include spin_lock_t node2pagelock = SPIN_LOCK_INITIALIZER; @@ -375,7 +376,9 @@ pager_unlock_page (struct user_pager_inf } diblock = indir_block (indirs[2].bno); - mark_indir_dirty (np, indirs[2].bno); + err = mark_indir_dirty (np, indirs[2].bno); + if (err) + goto out; /* Now we can allocate the single indirect block */ @@ -393,7 +396,9 @@ pager_unlock_page (struct user_pager_inf } siblock = indir_block (indirs[1].bno); - mark_indir_dirty (np, indirs[1].bno); + err = mark_indir_dirty (np, indirs[1].bno); + if (err) + goto out; /* Now we can allocate the data block. */ @@ -473,6 +478,8 @@ void create_disk_pager (void) { struct user_pager_info *upi = malloc (sizeof (struct user_pager_info)); + if (! upi) + error (1, errno, "Could not create disk pager"); upi->type = DISK; upi->np = 0; @@ -563,6 +570,11 @@ diskfs_get_filemap (struct node *np, vm_ if (!np->dn->fileinfo) { upi = malloc (sizeof (struct user_pager_info)); + if (! upi) + { + spin_unlock (&node2pagelock); + return MACH_PORT_NULL; + } upi->type = FILE_DATA; upi->np = np; upi->max_prot = prot; diff -rup /local/src/hurd.orig/ufs/pokeloc.c hurd/ufs/pokeloc.c --- /local/src/hurd.orig/ufs/pokeloc.c Mon Sep 23 13:25:16 1996 +++ hurd/ufs/pokeloc.c Tue Aug 21 23:48:24 2001 @@ -36,6 +36,8 @@ record_poke (void *loc, vm_size_t length { struct pokeloc *pl = malloc (sizeof (struct pokeloc)); vm_offset_t offset; + if (! pl) + assert_perror (errno); offset = loc - disk_image; pl->offset = trunc_page (offset); diff -rup /local/src/hurd.orig/ufs/sizes.c hurd/ufs/sizes.c --- /local/src/hurd.orig/ufs/sizes.c Mon Sep 13 02:35:11 1999 +++ hurd/ufs/sizes.c Tue Aug 21 23:27:29 2001 @@ -635,7 +635,9 @@ diskfs_grow (struct node *np, } diblock = indir_block (indirs[2].bno); - mark_indir_dirty (np, indirs[2].bno); + err = mark_indir_dirty (np, indirs[2].bno); + if (err) + goto out; /* Now we can allocate the single indirect block */ err = ffs_alloc (np, lbn, @@ -652,7 +654,9 @@ diskfs_grow (struct node *np, } siblock = indir_block (indirs[1].bno); - mark_indir_dirty (np, indirs[1].bno); + err = mark_indir_dirty (np, indirs[1].bno); + if (err) + goto out; /* Now we can allocate the data block. */ err = ffs_alloc (np, lbn, diff -rup /local/src/hurd.orig/ufs/ufs.h hurd/ufs/ufs.h --- /local/src/hurd.orig/ufs/ufs.h Sat Jul 10 21:43:00 1999 +++ hurd/ufs/ufs.h Tue Aug 21 23:29:25 2001 @@ -25,6 +25,7 @@ #include #include #include +#include #include "fs.h" #include "dinode.h" @@ -253,7 +254,7 @@ error_t ffs_realloccg(struct node *, dad /* From bmap.c */ error_t fetch_indir_spec (struct node *, daddr_t, struct iblock_spec *); -void mark_indir_dirty (struct node *, daddr_t); +error_t mark_indir_dirty (struct node *, daddr_t); /* From hyper.c: */ void get_hypermetadata (void); diff -rup /local/src/hurd.orig/ufs-fsck/ChangeLog hurd/ufs-fsck/ChangeLog --- /local/src/hurd.orig/ufs-fsck/ChangeLog Wed Apr 25 13:38:24 2001 +++ hurd/ufs-fsck/ChangeLog Wed Aug 22 01:37:59 2001 @@ -1,3 +1,10 @@ +2001-08-22 Igor Khavkine + + * dir.c (record_directory): Check return value of malloc(). + * pass1.c (pass1): Likewise. + * setup.c (setup): Likewise. + * utilities.c (getinode): Likewise. + 2001-02-25 Roland McGrath * utilities.c: Include for decl. diff -rup /local/src/hurd.orig/ufs-fsck/dir.c hurd/ufs-fsck/dir.c --- /local/src/hurd.orig/ufs-fsck/dir.c Thu May 6 10:35:18 1999 +++ hurd/ufs-fsck/dir.c Tue Aug 21 23:50:39 2001 @@ -18,6 +18,9 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include +#include + #include "fsck.h" /* This routine is used in pass 1 to initialize DIRARRAY and DIRSORTED. @@ -34,6 +37,8 @@ record_directory (struct dinode *dp, ino blks = NDADDR + NIADDR; blks *= sizeof (daddr_t); dnp = malloc (sizeof (struct dirinfo) + blks); + if (!dnp) + error (1, errno, "malloc"); dnp->i_number = number; dnp->i_parent = dnp->i_dotdot = 0; @@ -48,6 +53,8 @@ record_directory (struct dinode *dp, ino dirarraysize = 100; dirarray = malloc (dirarraysize * sizeof (struct dirinfo *)); dirsorted = malloc (dirarraysize * sizeof (struct dirinfo *)); + if (!dirarray || !dirsorted) + error (1, errno, "malloc"); } else { @@ -56,6 +63,8 @@ record_directory (struct dinode *dp, ino dirarraysize * sizeof (struct dirinfo *)); dirsorted = realloc (dirsorted, dirarraysize * sizeof (struct dirinfo *)); + if (!dirarray || !dirsorted) + error (1, errno, "malloc"); } } dirarray[dirarrayused] = dnp; diff -rup /local/src/hurd.orig/ufs-fsck/pass1.c hurd/ufs-fsck/pass1.c --- /local/src/hurd.orig/ufs-fsck/pass1.c Wed May 1 23:23:29 1996 +++ hurd/ufs-fsck/pass1.c Tue Aug 21 23:51:41 2001 @@ -19,6 +19,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include +#include #include "fsck.h" @@ -106,6 +108,9 @@ pass1 () } } new = malloc (sizeof (struct dups)); + if (! new) + error (1, errno, "malloc"); + new->dup = bno; if (muldup == 0) { diff -rup /local/src/hurd.orig/ufs-fsck/setup.c hurd/ufs-fsck/setup.c --- /local/src/hurd.orig/ufs-fsck/setup.c Thu Mar 25 02:44:33 1999 +++ hurd/ufs-fsck/setup.c Tue Aug 21 23:54:12 2001 @@ -187,5 +187,11 @@ setup (char *dev) typemap = calloc (maxino + 1, sizeof (char)); linkcount = calloc (maxino + 1, sizeof (nlink_t)); linkfound = calloc (maxino + 1, sizeof (nlink_t)); + if (!bmapsize || !blockmap || !inodestate || !typemap || !linkcount + || !linkfound) + { + error (0, errno, "calloc"); + return 0; + } return 1; } diff -rup /local/src/hurd.orig/ufs-fsck/utilities.c hurd/ufs-fsck/utilities.c --- /local/src/hurd.orig/ufs-fsck/utilities.c Wed Apr 25 13:38:24 2001 +++ hurd/ufs-fsck/utilities.c Tue Aug 21 23:55:18 2001 @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -62,6 +63,8 @@ getinode (ino_t ino, struct dinode *di) if (!lastifrag) lastifrag = malloc (sblock->fs_bsize); + if (!lastifrag) + error (1, errno, "malloc"); iblk = ino_to_fsba (sblock, ino); if (iblk != lastifragaddr) diff -rup /local/src/hurd.orig/ufs-utils/ChangeLog hurd/ufs-utils/ChangeLog --- /local/src/hurd.orig/ufs-utils/ChangeLog Wed Apr 25 13:38:24 2001 +++ hurd/ufs-utils/ChangeLog Wed Aug 22 01:39:00 2001 @@ -1,3 +1,7 @@ +2001-08-22 Igor Khavkine + + * mkfs.c: Check return value of calloc(). + 2001-02-25 Roland McGrath * mkfs.c [!STANDALONE]: Include for decl. diff -rup /local/src/hurd.orig/ufs-utils/mkfs.c hurd/ufs-utils/mkfs.c --- /local/src/hurd.orig/ufs-utils/mkfs.c Wed Apr 25 13:38:24 2001 +++ hurd/ufs-utils/mkfs.c Tue Aug 21 23:56:16 2001 @@ -848,6 +848,9 @@ next: for (sblock.fs_csshift = 0; i > 1; i >>= 1) sblock.fs_csshift++; fscs = (struct csum *)calloc(1, sblock.fs_cssize); + if (! fscs) + deverr (40, errno, "calloc"); + sblock.fs_magic = FS_MAGIC; sblock.fs_rotdelay = rotdelay; sblock.fs_minfree = minfree; diff -rup /local/src/hurd.orig/usermux/ChangeLog hurd/usermux/ChangeLog --- /local/src/hurd.orig/usermux/ChangeLog Wed Apr 25 13:38:24 2001 +++ hurd/usermux/ChangeLog Wed Aug 22 01:40:07 2001 @@ -1,3 +1,7 @@ +2001-08-22 Igor Khavkine + + * mux.c (lookup_pwent): Check return value of strdup(). + 2001-02-12 Marcus Brinkmann * usermux.c (options): Include . Add global variable diff -rup /local/src/hurd.orig/usermux/mux.c hurd/usermux/mux.c --- /local/src/hurd.orig/usermux/mux.c Thu Jul 20 01:48:17 2000 +++ hurd/usermux/mux.c Tue Aug 21 23:57:27 2001 @@ -340,6 +340,11 @@ lookup_pwent (struct usermux *mux, const return ENOMEM; nm->name = strdup (user); + if (! nm->name) + { + free_name (nm); + return ENOMEM; + } err = create_user_node (mux, nm, pw, node); if (err) { diff -rup /local/src/hurd.orig/utils/ChangeLog hurd/utils/ChangeLog --- /local/src/hurd.orig/utils/ChangeLog Wed Jul 25 01:50:01 2001 +++ hurd/utils/ChangeLog Wed Aug 22 01:44:09 2001 @@ -1,3 +1,13 @@ +2001-08-22 Igor Khavkine + + * ftpcp.c (get_host_conn, econnect, ebasename): Check return + value of strdup(). + * msgport.c (add_cmd, parse_cmd_opt): Check return value of + realloc() and malloc(). + * ping.c (main): Change strlen+malloc+strcpy to strdup(). + * ps.c (main): Check return value of realloc(). + * x.c (verify_password): Check if asprintf() succeeds. + 2001-06-15 Neal H Walfield * settrans.c (options): New option `--orphan'. diff -rup /local/src/hurd.orig/utils/ftpcp.c hurd/utils/ftpcp.c --- /local/src/hurd.orig/utils/ftpcp.c Sat Aug 9 19:51:26 1997 +++ hurd/utils/ftpcp.c Tue Aug 21 23:59:41 2001 @@ -109,6 +109,8 @@ get_host_conn (char *name, struct ftp_co if (cname) *cname = strdup (he->h_name); + if (! *cname) + error (11, ENOMEM, "%s", name); return conn; } @@ -193,7 +195,11 @@ econnect (struct epoint *e, struct ftp_c "%s: Ftp login parameter specified for a local endpoint (%s,%s,%s)", e->name, e->params.user, e->params.pass, e->params.acct); else - e->file = strdup (e->name); + { + e->file = strdup (e->name); + if (! e->file) + error (22, ENOMEM, "Cannot allocate name storage"); + } } static error_t @@ -279,6 +285,8 @@ ebasename (struct epoint *e, const char else { *base = strdup (basename (composite)); + if (! *base) + return ENOMEM; return 0; } } diff -rup /local/src/hurd.orig/utils/msgport.c hurd/utils/msgport.c --- /local/src/hurd.orig/utils/msgport.c Fri Mar 17 12:26:36 2000 +++ hurd/utils/msgport.c Wed Aug 22 00:04:49 2001 @@ -500,6 +500,8 @@ add_cmd (cmd_func_t func, size_t minargs struct cmds_argp_params *params = state->input; size_t num_cmds = *params->num_cmds + 1; cmd_t *cmds = realloc (*params->cmds, num_cmds * sizeof(cmd_t)); + if (! cmds) + return ENOMEM; *params->cmds = cmds; *params->num_cmds = num_cmds; @@ -510,6 +512,11 @@ add_cmd (cmd_func_t func, size_t minargs if (maxargs) { cmd->args = malloc (maxargs * sizeof (char *)); + if (! cmd->args) + { + free (cmds); + return ENOMEM; + } if (arg) cmd->args[i++] = arg; while (i < maxargs @@ -541,6 +548,9 @@ parse_cmd_opt (int key, char *arg, struc re-parse it with 2 dashes prepended. */ size_t len = strlen (arg) + 1; arg_hack_buf = realloc (arg_hack_buf, 2 + len); + if (! arg_hack_buf) + argp_failure (state, 5, ENOMEM, "%s", arg); + state->argv[--state->next] = arg_hack_buf; state->argv[state->next][0] = '-'; state->argv[state->next][1] = '-'; diff -rup /local/src/hurd.orig/utils/ping.c hurd/utils/ping.c --- /local/src/hurd.orig/utils/ping.c Tue Oct 20 05:42:49 1998 +++ hurd/utils/ping.c Wed Aug 22 00:06:53 2001 @@ -355,8 +355,12 @@ main(int argc, char *argv[]) hp->h_length = sizeof(to->sin_addr); } memcpy(&to->sin_addr, hp->h_addr, hp->h_length); - hostname = malloc (strlen (hp->h_name) + 1); - strcpy (hostname, hp->h_name); + hostname = strdup (hp->h_name); + if (! hostname) + { + fprintf (stderr, "ping: out of memory.\n"); + exit (2); + } } if (options & F_FLOOD && options & F_INTERVAL) { diff -rup /local/src/hurd.orig/utils/ps.c hurd/utils/ps.c --- /local/src/hurd.orig/utils/ps.c Sun Jun 20 17:54:33 1999 +++ hurd/utils/ps.c Wed Aug 22 00:08:40 2001 @@ -276,6 +276,9 @@ main(int argc, char *argv[]) { size_t len = strlen (arg) + 1; arg_hack_buf = realloc (arg_hack_buf, 1 + len); + if (! arg_hack_buf) + argp_failure (state, 5, ENOMEM, "%s", arg); + state->argv[--state->next] = arg_hack_buf; state->argv[state->next][0] = '-'; memcpy (&state->argv[state->next][1], arg, len); diff -rup /local/src/hurd.orig/utils/x.c hurd/utils/x.c --- /local/src/hurd.orig/utils/x.c Tue Aug 27 14:27:31 1996 +++ hurd/utils/x.c Wed Aug 22 00:10:37 2001 @@ -148,8 +148,12 @@ void verify_passwd (const char *name, co return; /* Already got this one. */ if (name) - asprintf (&prompt, "Password for %s%s:", - is_group ? "group " : "", name); + { + asprintf (&prompt, "Password for %s%s:", + is_group ? "group " : "", name); + if (! prompt) + prompt = "Password:"; + } else prompt = "Password:";