summaryrefslogtreecommitdiff
path: root/usr.bin/mail
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>2001-11-21 20:41:57 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>2001-11-21 20:41:57 +0000
commitc24e90e0637476fbd9d6983cfb62b935af4c7d97 (patch)
tree6aa744dff04bf458c68ddd45a9ef889f3086688e /usr.bin/mail
parent9e53048fff7853801448fee927bc5bae4c8b4a91 (diff)
o kill strcpy()
o check return values of malloc and friends o use strdup() when sensible
Diffstat (limited to 'usr.bin/mail')
-rw-r--r--usr.bin/mail/cmd1.c9
-rw-r--r--usr.bin/mail/cmd2.c11
-rw-r--r--usr.bin/mail/cmd3.c28
-rw-r--r--usr.bin/mail/lex.c16
-rw-r--r--usr.bin/mail/list.c6
-rw-r--r--usr.bin/mail/names.c7
-rw-r--r--usr.bin/mail/popen.c9
-rw-r--r--usr.bin/mail/tty.c6
-rw-r--r--usr.bin/mail/vars.c7
9 files changed, 55 insertions, 44 deletions
diff --git a/usr.bin/mail/cmd1.c b/usr.bin/mail/cmd1.c
index e69b57a9b6d..eb7e5daa751 100644
--- a/usr.bin/mail/cmd1.c
+++ b/usr.bin/mail/cmd1.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd1.c,v 1.21 2001/11/21 15:26:39 millert Exp $ */
+/* $OpenBSD: cmd1.c,v 1.22 2001/11/21 20:41:55 millert Exp $ */
/* $NetBSD: cmd1.c,v 1.9 1997/07/09 05:29:48 mikel Exp $ */
/*-
@@ -38,7 +38,7 @@
#if 0
static const char sccsid[] = "@(#)cmd1.c 8.2 (Berkeley) 4/20/95";
#else
-static const char rcsid[] = "$OpenBSD: cmd1.c,v 1.21 2001/11/21 15:26:39 millert Exp $";
+static const char rcsid[] = "$OpenBSD: cmd1.c,v 1.22 2001/11/21 20:41:55 millert Exp $";
#endif
#endif /* not lint */
@@ -491,9 +491,8 @@ folders(void *v)
char dirname[PATHSIZE];
char cmd[BUFSIZ];
- if (getfold(dirname, sizeof(dirname)) < 0) {
- strcpy(dirname, "$HOME");
- }
+ if (getfold(dirname, sizeof(dirname)) < 0)
+ strlcpy(dirname, "$HOME", sizeof(dirname));
snprintf(cmd, sizeof(cmd), "cd %s; %s %s", dirname, value("LISTER"),
files && *files ? files : "");
diff --git a/usr.bin/mail/cmd2.c b/usr.bin/mail/cmd2.c
index 2d3d3c595bf..e8621d264e7 100644
--- a/usr.bin/mail/cmd2.c
+++ b/usr.bin/mail/cmd2.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd2.c,v 1.10 2001/11/21 15:26:39 millert Exp $ */
+/* $OpenBSD: cmd2.c,v 1.11 2001/11/21 20:41:55 millert Exp $ */
/* $NetBSD: cmd2.c,v 1.7 1997/05/17 19:55:10 pk Exp $ */
/*
@@ -38,7 +38,7 @@
#if 0
static const char sccsid[] = "@(#)cmd2.c 8.1 (Berkeley) 6/6/93";
#else
-static const char rcsid[] = "$OpenBSD: cmd2.c,v 1.10 2001/11/21 15:26:39 millert Exp $";
+static const char rcsid[] = "$OpenBSD: cmd2.c,v 1.11 2001/11/21 20:41:55 millert Exp $";
#endif
#endif /* not lint */
@@ -466,8 +466,11 @@ ignore1(char **list, struct ignoretab *tab, char *which)
continue;
h = hash(field);
igp = (struct ignore *)calloc(1, sizeof(struct ignore));
- igp->i_field = (char *)calloc(strlen(field) + 1, sizeof(char));
- strcpy(igp->i_field, field);
+ if (igp == NULL)
+ errx(1, "Out of memory");
+ igp->i_field = strdup(field);
+ if (igp->i_field == NULL)
+ errx(1, "Out of memory");
igp->i_link = tab->i_head[h];
tab->i_head[h] = igp;
tab->i_count++;
diff --git a/usr.bin/mail/cmd3.c b/usr.bin/mail/cmd3.c
index f9eee9df8a4..bddc3c8e66f 100644
--- a/usr.bin/mail/cmd3.c
+++ b/usr.bin/mail/cmd3.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd3.c,v 1.17 2001/11/21 15:26:39 millert Exp $ */
+/* $OpenBSD: cmd3.c,v 1.18 2001/11/21 20:41:55 millert Exp $ */
/* $NetBSD: cmd3.c,v 1.8 1997/07/09 05:29:49 mikel Exp $ */
/*
@@ -38,7 +38,7 @@
#if 0
static const char sccsid[] = "@(#)cmd3.c 8.2 (Berkeley) 4/20/95";
#else
-static const char rcsid[] = "$OpenBSD: cmd3.c,v 1.17 2001/11/21 15:26:39 millert Exp $";
+static const char rcsid[] = "$OpenBSD: cmd3.c,v 1.18 2001/11/21 20:41:55 millert Exp $";
#endif
#endif /* not lint */
@@ -265,6 +265,7 @@ char *
reedit(char *subj)
{
char *newsubj;
+ size_t len;
if (subj == NULL)
return(NULL);
@@ -272,9 +273,10 @@ reedit(char *subj)
(subj[1] == 'e' || subj[1] == 'E') &&
subj[2] == ':')
return(subj);
- newsubj = salloc(strlen(subj) + 5);
- strcpy(newsubj, "Re: ");
- strcpy(newsubj + 4, subj);
+ len = strlen(subj) + 5;
+ newsubj = salloc(len);
+ strlcpy(newsubj, "Re: ", len);
+ strlcat(newsubj, subj, len);
return(newsubj);
}
@@ -489,7 +491,8 @@ group(void *v)
gname = *argv;
h = hash(gname);
if ((gh = findgroup(gname)) == NULL) {
- gh = (struct grouphead *)calloc(sizeof(*gh), 1);
+ if ((gh = (struct grouphead *)calloc(sizeof(*gh), 1)) == NULL)
+ errx(1, "Out of memory");
gh->g_name = vcopy(gname);
gh->g_list = NULL;
gh->g_link = groups[h];
@@ -503,7 +506,8 @@ group(void *v)
*/
for (ap = argv+1; *ap != NULL; ap++) {
- gp = (struct group *)calloc(sizeof(*gp), 1);
+ if ((gp = (struct group *)calloc(sizeof(*gp), 1)) == NULL)
+ errx(1, "Out of memory");
gp->ge_name = vcopy(*ap);
gp->ge_link = gh->g_list;
gh->g_list = gp;
@@ -719,7 +723,7 @@ int
alternates(void *v)
{
char **namelist = v;
- char **ap, **ap2, *cp;
+ char **ap, **ap2;
int c;
c = argcount(namelist) + 1;
@@ -733,11 +737,11 @@ alternates(void *v)
}
if (altnames != 0)
(void)free(altnames);
- altnames = (char **)calloc(c, sizeof(char *));
+ if ((altnames = (char **)calloc(c, sizeof(char *))) == NULL)
+ errx(1, "Out of memory");
for (ap = namelist, ap2 = altnames; *ap; ap++, ap2++) {
- cp = (char *)calloc(strlen(*ap) + 1, sizeof(char));
- strcpy(cp, *ap);
- *ap2 = cp;
+ if ((*ap2 = strdup(*ap)) == NULL)
+ errx(1, "Out of memory");
}
*ap2 = 0;
return(0);
diff --git a/usr.bin/mail/lex.c b/usr.bin/mail/lex.c
index 3f1643a5651..aea3fb8b671 100644
--- a/usr.bin/mail/lex.c
+++ b/usr.bin/mail/lex.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: lex.c,v 1.26 2001/11/21 15:26:39 millert Exp $ */
+/* $OpenBSD: lex.c,v 1.27 2001/11/21 20:41:55 millert Exp $ */
/* $NetBSD: lex.c,v 1.10 1997/05/17 19:55:13 pk Exp $ */
/*
@@ -38,7 +38,7 @@
#if 0
static const char sccsid[] = "@(#)lex.c 8.2 (Berkeley) 4/20/95";
#else
-static const char rcsid[] = "$OpenBSD: lex.c,v 1.26 2001/11/21 15:26:39 millert Exp $";
+static const char rcsid[] = "$OpenBSD: lex.c,v 1.27 2001/11/21 20:41:55 millert Exp $";
#endif
#endif /* not lint */
@@ -132,7 +132,7 @@ setfile(char *name)
}
shudclob = 1;
edit = isedit;
- strcpy(prevfile, mailname);
+ strlcpy(prevfile, mailname, PATHSIZE);
if (name != mailname)
strlcpy(mailname, name, sizeof(mailname));
mailsize = fsize(ibuf);
@@ -536,12 +536,14 @@ out:
* lists to message list functions.
*/
void
-setmsize(int sz)
+setmsize(int n)
{
+ size_t msize;
- if (msgvec != 0)
- (void)free(msgvec);
- msgvec = (int *)calloc(sz + 1, sizeof(*msgvec));
+ msize = (n + 1) * sizeof(*msgvec);
+ if ((msgvec = realloc(msgvec, msize)) == NULL)
+ errx(1, "Out of memory");
+ memset(msgvec, 0, msize);
}
/*
diff --git a/usr.bin/mail/list.c b/usr.bin/mail/list.c
index 04375fb28d4..9b0fcccdc2e 100644
--- a/usr.bin/mail/list.c
+++ b/usr.bin/mail/list.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: list.c,v 1.11 2001/11/21 15:26:39 millert Exp $ */
+/* $OpenBSD: list.c,v 1.12 2001/11/21 20:41:55 millert Exp $ */
/* $NetBSD: list.c,v 1.7 1997/07/09 05:23:36 mikel Exp $ */
/*
@@ -38,7 +38,7 @@
#if 0
static const char sccsid[] = "@(#)list.c 8.4 (Berkeley) 5/1/95";
#else
-static const char rcsid[] = "$OpenBSD: list.c,v 1.11 2001/11/21 15:26:39 millert Exp $";
+static const char rcsid[] = "$OpenBSD: list.c,v 1.12 2001/11/21 20:41:55 millert Exp $";
#endif
#endif /* not lint */
@@ -513,7 +513,7 @@ scan(char **sp)
int quotec;
if (regretp >= 0) {
- strcpy(lexstring, string_stack[regretp]);
+ strlcpy(lexstring, string_stack[regretp], STRINGLEN);
lexnumber = numberstack[regretp];
return(regretstack[regretp--]);
}
diff --git a/usr.bin/mail/names.c b/usr.bin/mail/names.c
index 15ffb7d334f..26bb61817fe 100644
--- a/usr.bin/mail/names.c
+++ b/usr.bin/mail/names.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: names.c,v 1.15 2001/11/21 18:43:27 millert Exp $ */
+/* $OpenBSD: names.c,v 1.16 2001/11/21 20:41:55 millert Exp $ */
/* $NetBSD: names.c,v 1.5 1996/06/08 19:48:32 christos Exp $ */
/*
@@ -38,7 +38,7 @@
#if 0
static const char sccsid[] = "@(#)names.c 8.1 (Berkeley) 6/6/93";
#else
-static const char rcsid[] = "$OpenBSD: names.c,v 1.15 2001/11/21 18:43:27 millert Exp $";
+static const char rcsid[] = "$OpenBSD: names.c,v 1.16 2001/11/21 20:41:55 millert Exp $";
#endif
#endif /* not lint */
@@ -670,8 +670,7 @@ delname(struct name *np, char *name)
*/
#if 0
void
-prettyprint(name)
- struct name *name;
+prettyprint(struct name *name)
{
struct name *np;
diff --git a/usr.bin/mail/popen.c b/usr.bin/mail/popen.c
index 33961df1dbc..30ab4d9dedb 100644
--- a/usr.bin/mail/popen.c
+++ b/usr.bin/mail/popen.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: popen.c,v 1.29 2001/11/21 15:26:39 millert Exp $ */
+/* $OpenBSD: popen.c,v 1.30 2001/11/21 20:41:55 millert Exp $ */
/* $NetBSD: popen.c,v 1.6 1997/05/13 06:48:42 mikel Exp $ */
/*
@@ -38,7 +38,7 @@
#if 0
static const char sccsid[] = "@(#)popen.c 8.1 (Berkeley) 6/6/93";
#else
-static const char rcsid[] = "$OpenBSD: popen.c,v 1.29 2001/11/21 15:26:39 millert Exp $";
+static const char rcsid[] = "$OpenBSD: popen.c,v 1.30 2001/11/21 20:41:55 millert Exp $";
#endif
#endif /* not lint */
@@ -331,8 +331,11 @@ findchild(pid_t pid, int dont_alloc)
if (child_freelist) {
*cpp = child_freelist;
child_freelist = (*cpp)->link;
- } else
+ } else {
*cpp = (struct child *)malloc(sizeof(struct child));
+ if (*cpp == NULL)
+ errx(1, "Out of memory");
+ }
(*cpp)->pid = pid;
(*cpp)->done = (*cpp)->free = 0;
(*cpp)->link = NULL;
diff --git a/usr.bin/mail/tty.c b/usr.bin/mail/tty.c
index e0b344adb12..69fd60d6fbf 100644
--- a/usr.bin/mail/tty.c
+++ b/usr.bin/mail/tty.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tty.c,v 1.14 2001/11/21 15:26:39 millert Exp $ */
+/* $OpenBSD: tty.c,v 1.15 2001/11/21 20:41:56 millert Exp $ */
/* $NetBSD: tty.c,v 1.7 1997/07/09 05:25:46 mikel Exp $ */
/*
@@ -38,7 +38,7 @@
#if 0
static const char sccsid[] = "@(#)tty.c 8.2 (Berkeley) 4/20/95";
#else
-static const char rcsid[] = "$OpenBSD: tty.c,v 1.14 2001/11/21 15:26:39 millert Exp $";
+static const char rcsid[] = "$OpenBSD: tty.c,v 1.15 2001/11/21 20:41:56 millert Exp $";
#endif
#endif /* not lint */
@@ -201,7 +201,7 @@ readtty(char *pr, char *src)
}
#ifndef TIOCSTI
if (src != NULL)
- cp = copy(src, canonb);
+ cp = copy(src, canonb); /* safe, bounds checked above */
else
cp = copy("", canonb);
fputs(canonb, stdout);
diff --git a/usr.bin/mail/vars.c b/usr.bin/mail/vars.c
index a4477122a54..e79ceda8099 100644
--- a/usr.bin/mail/vars.c
+++ b/usr.bin/mail/vars.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vars.c,v 1.7 2001/11/21 15:26:39 millert Exp $ */
+/* $OpenBSD: vars.c,v 1.8 2001/11/21 20:41:56 millert Exp $ */
/* $NetBSD: vars.c,v 1.4 1996/06/08 19:48:45 christos Exp $ */
/*
@@ -38,7 +38,7 @@
#if 0
static const char sccsid[] = "@(#)vars.c 8.1 (Berkeley) 6/6/93";
#else
-static const char rcsid[] = "$OpenBSD: vars.c,v 1.7 2001/11/21 15:26:39 millert Exp $";
+static const char rcsid[] = "$OpenBSD: vars.c,v 1.8 2001/11/21 20:41:56 millert Exp $";
#endif
#endif /* not lint */
@@ -63,7 +63,8 @@ assign(char *name, char *value)
h = hash(name);
vp = lookup(name);
if (vp == NULL) {
- vp = (struct var *)calloc(sizeof(*vp), 1);
+ if ((vp = (struct var *)calloc(sizeof(*vp), 1)) == NULL)
+ errx(1, "Out of memory");
vp->v_name = vcopy(name);
vp->v_link = variables[h];
variables[h] = vp;