Module Name:    src
Committed By:   dholland
Date:           Sun Mar 23 05:06:42 UTC 2014

Modified Files:
        src/bin/ed: buf.c cbc.c ed.h glbl.c io.c main.c re.c sub.c undo.c

Log Message:
sprintf considered harmful


To generate a diff of this commit:
cvs rdiff -u -r1.26 -r1.27 src/bin/ed/buf.c
cvs rdiff -u -r1.22 -r1.23 src/bin/ed/cbc.c
cvs rdiff -u -r1.35 -r1.36 src/bin/ed/ed.h
cvs rdiff -u -r1.6 -r1.7 src/bin/ed/glbl.c src/bin/ed/sub.c
cvs rdiff -u -r1.9 -r1.10 src/bin/ed/io.c
cvs rdiff -u -r1.25 -r1.26 src/bin/ed/main.c
cvs rdiff -u -r1.20 -r1.21 src/bin/ed/re.c
cvs rdiff -u -r1.5 -r1.6 src/bin/ed/undo.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/bin/ed/buf.c
diff -u src/bin/ed/buf.c:1.26 src/bin/ed/buf.c:1.27
--- src/bin/ed/buf.c:1.26	Fri Mar 17 14:37:14 2006
+++ src/bin/ed/buf.c	Sun Mar 23 05:06:42 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: buf.c,v 1.26 2006/03/17 14:37:14 rumble Exp $	*/
+/*	$NetBSD: buf.c,v 1.27 2014/03/23 05:06:42 dholland Exp $	*/
 
 /* buf.c: This file contains the scratch-file buffer routines for the
    ed line editor. */
@@ -33,7 +33,7 @@
 #if 0
 static char *rcsid = "@(#)buf.c,v 1.4 1994/02/01 00:34:35 alm Exp";
 #else
-__RCSID("$NetBSD: buf.c,v 1.26 2006/03/17 14:37:14 rumble Exp $");
+__RCSID("$NetBSD: buf.c,v 1.27 2014/03/23 05:06:42 dholland Exp $");
 #endif
 #endif /* not lint */
 
@@ -70,7 +70,7 @@ get_sbuf_line(line_t *lp)
 		sfseek = lp->seek;
 		if (fseek(sfp, sfseek, SEEK_SET) < 0) {
 			fprintf(stderr, "%s\n", strerror(errno));
-			sprintf(errmsg, "cannot seek temp file");
+			seterrmsg("cannot seek temp file");
 			return NULL;
 		}
 	}
@@ -78,7 +78,7 @@ get_sbuf_line(line_t *lp)
 	REALLOC(sfbuf, sfbufsz, len + 1, NULL);
 	if ((ct = fread(sfbuf, sizeof(char), len, sfp)) <  0 || ct != len) {
 		fprintf(stderr, "%s\n", strerror(errno));
-		sprintf(errmsg, "cannot read temp file");
+		seterrmsg("cannot read temp file");
 		return NULL;
 	}
 	sfseek += len;				/* update file position */
@@ -98,14 +98,14 @@ put_sbuf_line(char *cs)
 
 	if ((lp = (line_t *) malloc(sizeof(line_t))) == NULL) {
 		fprintf(stderr, "%s\n", strerror(errno));
-		sprintf(errmsg, "out of memory");
+		seterrmsg("out of memory");
 		return NULL;
 	}
 	/* assert: cs is '\n' terminated */
 	for (s = cs; *s != '\n'; s++)
 		;
 	if (s - cs >= LINECHARS) {
-		sprintf(errmsg, "line too long");
+		seterrmsg("line too long");
 		free(lp);
 		return NULL;
 	}
@@ -114,7 +114,7 @@ put_sbuf_line(char *cs)
 	if (seek_write) {
 		if (fseek(sfp, 0L, SEEK_END) < 0) {
 			fprintf(stderr, "%s\n", strerror(errno));
-			sprintf(errmsg, "cannot seek temp file");
+			seterrmsg("cannot seek temp file");
 			free(lp);
 			return NULL;
 		}
@@ -125,7 +125,7 @@ put_sbuf_line(char *cs)
 	if ((ct = fwrite(cs, sizeof(char), len, sfp)) < 0 || ct != len) {
 		sfseek = -1;
 		fprintf(stderr, "%s\n", strerror(errno));
-		sprintf(errmsg, "cannot write temp file");
+		seterrmsg("cannot write temp file");
 		free(lp);
 		return NULL;
 	}
@@ -160,7 +160,7 @@ get_line_node_addr(line_t *lp)
 	while (cp != lp && (cp = cp->q_forw) != &buffer_head)
 		n++;
 	if (n && cp == &buffer_head) {
-		sprintf(errmsg, "invalid address");
+		seterrmsg("invalid address");
 		return ERR;
 	}
 	return n;
@@ -222,7 +222,7 @@ open_sbuf(void)
 		(void)asprintf(&sfn, "%s/ed.XXXXXX", tmp);
 	if (sfn == NULL) {
 		warn(NULL);
-		sprintf(errmsg, "could not allocate memory");
+		seterrmsg("could not allocate memory");
 		umask(u);
 		return ERR;
 	}
@@ -232,7 +232,7 @@ open_sbuf(void)
 		if (fd != -1)
 			close(fd);
 		warn("%s", sfn);
-		sprintf(errmsg, "cannot open temp file");
+		seterrmsg("cannot open temp file");
 		umask(u);
 		return ERR;
 	}
@@ -248,7 +248,7 @@ close_sbuf(void)
 	if (sfp) {
 		if (fclose(sfp) < 0) {
 			fprintf(stderr, "%s: %s\n", sfn, strerror(errno));
-			sprintf(errmsg, "cannot close temp file");
+			seterrmsg("cannot close temp file");
 			return ERR;
 		}
 		sfp = NULL;

Index: src/bin/ed/cbc.c
diff -u src/bin/ed/cbc.c:1.22 src/bin/ed/cbc.c:1.23
--- src/bin/ed/cbc.c:1.22	Wed Jun  9 19:20:18 2010
+++ src/bin/ed/cbc.c	Sun Mar 23 05:06:42 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: cbc.c,v 1.22 2010/06/09 19:20:18 riz Exp $	*/
+/*	$NetBSD: cbc.c,v 1.23 2014/03/23 05:06:42 dholland Exp $	*/
 
 /* cbc.c: This file contains the encryption routines for the ed line editor */
 /*-
@@ -72,7 +72,7 @@
 #if 0
 static char *rcsid = "@(#)cbc.c,v 1.2 1994/02/01 00:34:36 alm Exp";
 #else
-__RCSID("$NetBSD: cbc.c,v 1.22 2010/06/09 19:20:18 riz Exp $");
+__RCSID("$NetBSD: cbc.c,v 1.23 2014/03/23 05:06:42 dholland Exp $");
 #endif
 #endif /* not lint */
 
@@ -252,7 +252,7 @@ get_keyword(void)
 static void
 des_error(const char *s /* the message */)
 {
-	(void)sprintf(errmsg, "%s", s ? s : strerror(errno));
+	seterrmsg("%s", s ? s : strerror(errno));
 }
 
 /*

Index: src/bin/ed/ed.h
diff -u src/bin/ed/ed.h:1.35 src/bin/ed/ed.h:1.36
--- src/bin/ed/ed.h:1.35	Mon Aug 29 14:51:18 2011
+++ src/bin/ed/ed.h	Sun Mar 23 05:06:42 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ed.h,v 1.35 2011/08/29 14:51:18 joerg Exp $	*/
+/*	$NetBSD: ed.h,v 1.36 2014/03/23 05:06:42 dholland Exp $	*/
 
 /* ed.h: type and constant definitions for the ed editor. */
 /*
@@ -115,7 +115,7 @@ if (--mutex == 0) { \
 	errno = 0 ; \
 	if (((i = strtol(p, &p, 10)) == LONG_MIN || i == LONG_MAX) && \
 	    errno == ERANGE) { \
-		sprintf(errmsg, "number out of range"); \
+		seterrmsg("number out of range"); \
 	    	i = 0; \
 		return ERR; \
 	} \
@@ -131,14 +131,14 @@ if ((i) > (n)) { \
 	if ((b) != NULL) { \
 		if ((ts = (char *) realloc((b), ti += max((i), MINBUFSZ))) == NULL) { \
 			fprintf(stderr, "%s\n", strerror(errno)); \
-			sprintf(errmsg, "out of memory"); \
+			seterrmsg("out of memory"); \
 			SPL0(); \
 			return err; \
 		} \
 	} else { \
 		if ((ts = (char *) malloc(ti += max((i), MINBUFSZ))) == NULL) { \
 			fprintf(stderr, "%s\n", strerror(errno)); \
-			sprintf(errmsg, "out of memory"); \
+			seterrmsg("out of memory"); \
 			SPL0(); \
 			return err; \
 		} \
@@ -156,7 +156,7 @@ if ((i) > (n)) { \
 	SPL1(); \
 	if ((ts = (char *) realloc((b), ti += max((i), MINBUFSZ))) == NULL) { \
 		fprintf(stderr, "%s\n", strerror(errno)); \
-		sprintf(errmsg, "out of memory"); \
+		seterrmsg("out of memory"); \
 		SPL0(); \
 		return err; \
 	} \
@@ -257,6 +257,7 @@ void unmark_line_node(line_t *);
 void unset_active_nodes(line_t *, line_t *);
 long write_file(const char *, const char *, long, long);
 long write_stream(FILE *, long, long);
+void seterrmsg(const char *, ...);
 
 /* global buffers */
 extern char stdinbuf[];
@@ -284,7 +285,7 @@ extern int ere;
 extern int des;
 extern int newline_added;	/* io.c */
 extern int patlock;
-extern char errmsg[];		/* re.c */
+extern char errmsg[];	/* re.c */
 extern long u_current_addr;	/* undo.c */
 extern long u_addr_last;	/* undo.c */
 #if defined(sun) && !defined(__SVR4)

Index: src/bin/ed/glbl.c
diff -u src/bin/ed/glbl.c:1.6 src/bin/ed/glbl.c:1.7
--- src/bin/ed/glbl.c:1.6	Sun Jun 26 19:10:49 2005
+++ src/bin/ed/glbl.c	Sun Mar 23 05:06:42 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: glbl.c,v 1.6 2005/06/26 19:10:49 christos Exp $	*/
+/*	$NetBSD: glbl.c,v 1.7 2014/03/23 05:06:42 dholland Exp $	*/
 
 /* glob.c: This file contains the global command routines for the ed line
    editor */
@@ -33,7 +33,7 @@
 #if 0
 static char *rcsid = "@(#)glob.c,v 1.1 1994/02/01 00:34:40 alm Exp";
 #else
-__RCSID("$NetBSD: glbl.c,v 1.6 2005/06/26 19:10:49 christos Exp $");
+__RCSID("$NetBSD: glbl.c,v 1.7 2014/03/23 05:06:42 dholland Exp $");
 #endif
 #endif /* not lint */
 
@@ -54,7 +54,7 @@ build_active_list(int isgcmd)
 	char delimiter;
 
 	if ((delimiter = *ibufp) == ' ' || delimiter == '\n') {
-		sprintf(errmsg, "invalid pattern delimiter");
+		seterrmsg("invalid pattern delimiter");
 		return ERR;
 	} else if ((pat = get_compiled_pattern()) == NULL)
 		return ERR;
@@ -114,13 +114,13 @@ exec_global(int interact, int gflag)
 			if (n < 0)
 				return ERR;
 			else if (n == 0) {
-				sprintf(errmsg, "unexpected end-of-file");
+				seterrmsg("unexpected end-of-file");
 				return ERR;
 			} else if (n == 1 && !strcmp(ibuf, "\n"))
 				continue;
 			else if (n == 2 && !strcmp(ibuf, "&\n")) {
 				if (cmd == NULL) {
-					sprintf(errmsg, "no previous command");
+					seterrmsg("no previous command");
 					return ERR;
 				} else cmd = ocmd;
 			} else if ((cmd = get_extended_line(&n, 0)) == NULL)
@@ -164,7 +164,7 @@ set_active_node(line_t *lp)
 			if ((ts = (line_t **) realloc(active_list, 
 			    (ti += MINBUFSZ) * sizeof(line_t **))) == NULL) {
 				fprintf(stderr, "%s\n", strerror(errno));
-				sprintf(errmsg, "out of memory");
+				seterrmsg("out of memory");
 				SPL0();
 				return ERR;
 			}
@@ -173,7 +173,7 @@ set_active_node(line_t *lp)
 			if ((ts = (line_t **) malloc((ti += MINBUFSZ) * 
 			    sizeof(line_t **))) == NULL) {
 				fprintf(stderr, "%s\n", strerror(errno));
-				sprintf(errmsg, "out of memory");
+				seterrmsg("out of memory");
 				SPL0();
 				return ERR;
 			}
Index: src/bin/ed/sub.c
diff -u src/bin/ed/sub.c:1.6 src/bin/ed/sub.c:1.7
--- src/bin/ed/sub.c:1.6	Thu Feb 17 16:29:26 2005
+++ src/bin/ed/sub.c	Sun Mar 23 05:06:42 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: sub.c,v 1.6 2005/02/17 16:29:26 xtraeme Exp $	*/
+/*	$NetBSD: sub.c,v 1.7 2014/03/23 05:06:42 dholland Exp $	*/
 
 /* sub.c: This file contains the substitution routines for the ed 
    line editor */
@@ -33,7 +33,7 @@
 #if 0
 static char *rcsid = "@(#)sub.c,v 1.1 1994/02/01 00:34:44 alm Exp";
 #else
-__RCSID("$NetBSD: sub.c,v 1.6 2005/02/17 16:29:26 xtraeme Exp $");
+__RCSID("$NetBSD: sub.c,v 1.7 2014/03/23 05:06:42 dholland Exp $");
 #endif
 #endif /* not lint */
 
@@ -86,7 +86,9 @@ extract_subst_template(void)
 
 	if (*ibufp == '%' && *(ibufp + 1) == delimiter) {
 		ibufp++;
-		if (!rhbuf) sprintf(errmsg, "no previous substitution");
+		if (!rhbuf) {
+			seterrmsg("no previous substitution");
+		}
 		return rhbuf;
 	}
 	while (*ibufp != delimiter) {
@@ -160,7 +162,7 @@ search_and_replace(pattern_t *pat, int g
 	}
 	current_addr = xa;
 	if  (nsubs == 0 && !(gflag & GLB)) {
-		sprintf(errmsg, "no match");
+		seterrmsg("no match");
 		return ERR;
 	} else if ((gflag & (GPR | GLS | GNP)) &&
 	    display_lines(current_addr, current_addr, gflag) < 0)
@@ -214,7 +216,7 @@ substitute_matching_text(pattern_t *pat,
 		i = eot - txt;
 		REALLOC(rbuf, rbufsz, off + i + 2, ERR);
 		if (i > 0 && !rm[0].rm_eo && (gflag & GSG)) {
-			sprintf(errmsg, "infinite substitution loop");
+			seterrmsg("infinite substitution loop");
 			return  ERR;
 		}
 		if (isbinary)

Index: src/bin/ed/io.c
diff -u src/bin/ed/io.c:1.9 src/bin/ed/io.c:1.10
--- src/bin/ed/io.c:1.9	Mon May 23 23:13:10 2011
+++ src/bin/ed/io.c	Sun Mar 23 05:06:42 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: io.c,v 1.9 2011/05/23 23:13:10 joerg Exp $	*/
+/*	$NetBSD: io.c,v 1.10 2014/03/23 05:06:42 dholland Exp $	*/
 
 /* io.c: This file contains the i/o routines for the ed line editor */
 /*-
@@ -32,7 +32,7 @@
 #if 0
 static char *rcsid = "@(#)io.c,v 1.1 1994/02/01 00:34:41 alm Exp";
 #else
-__RCSID("$NetBSD: io.c,v 1.9 2011/05/23 23:13:10 joerg Exp $");
+__RCSID("$NetBSD: io.c,v 1.10 2014/03/23 05:06:42 dholland Exp $");
 #endif
 #endif /* not lint */
 
@@ -50,13 +50,13 @@ read_file(char *fn, long n)
 	fp = (*fn == '!') ? popen(fn + 1, "r") : fopen(strip_escapes(fn), "r");
 	if (fp == NULL) {
 		fprintf(stderr, "%s: %s\n", fn, strerror(errno));
-		sprintf(errmsg, "cannot open input file");
+		seterrmsg("cannot open input file");
 		return ERR;
 	} else if ((size = read_stream(fp, n)) < 0)
 		return ERR;
 	 else if (((*fn == '!') ?  pclose(fp) : fclose(fp)) < 0) {
 		fprintf(stderr, "%s: %s\n", fn, strerror(errno));
-		sprintf(errmsg, "cannot close input file");
+		seterrmsg("cannot close input file");
 		return ERR;
 	}
 	if (!scripted)
@@ -136,7 +136,7 @@ get_stream_line(FILE *fp)
 		sbuf[i++] = c;
 	else if (ferror(fp)) {
 		fprintf(stderr, "%s\n", strerror(errno));
-		sprintf(errmsg, "cannot read input file");
+		seterrmsg("cannot read input file");
 		return ERR;
 	} else if (i) {
 		sbuf[i++] = '\n';
@@ -157,13 +157,13 @@ write_file(const char *fn, const char *m
 	fp = (*fn == '!') ? popen(fn+1, "w") : fopen(strip_escapes(fn), mode);
 	if (fp == NULL) {
 		fprintf(stderr, "%s: %s\n", fn, strerror(errno));
-		sprintf(errmsg, "cannot open output file");
+		seterrmsg("cannot open output file");
 		return ERR;
 	} else if ((size = write_stream(fp, n, m)) < 0)
 		return ERR;
 	 else if (((*fn == '!') ?  pclose(fp) : fclose(fp)) < 0) {
 		fprintf(stderr, "%s: %s\n", fn, strerror(errno));
-		sprintf(errmsg, "cannot close output file");
+		seterrmsg("cannot close output file");
 		return ERR;
 	}
 	if (!scripted)
@@ -208,7 +208,7 @@ put_stream_line(FILE *fp, char *s, int l
 	while (len--)
 		if ((des ? put_des_char(*s++, fp) : fputc(*s++, fp)) < 0) {
 			fprintf(stderr, "%s\n", strerror(errno));
-			sprintf(errmsg, "cannot write file");
+			seterrmsg("cannot write file");
 			return ERR;
 		}
 	return 0;
@@ -239,7 +239,7 @@ get_extended_line(int *sizep, int nonl)
 		if ((n = get_tty_line()) < 0)
 			return NULL;
 		else if (n == 0 || ibuf[n - 1] != '\n') {
-			sprintf(errmsg, "unexpected end-of-file");
+			seterrmsg("unexpected end-of-file");
 			return NULL;
 		}
 		REALLOC(cvbuf, cvbufsz, l + n, NULL);
@@ -280,7 +280,7 @@ get_tty_line(void)
 		case EOF:
 			if (ferror(stdin)) {
 				fprintf(stderr, "stdin: %s\n", strerror(errno));
-				sprintf(errmsg, "cannot read stdin");
+				seterrmsg("cannot read stdin");
 				clearerr(stdin);
 				ibufp = NULL;
 				return ERR;

Index: src/bin/ed/main.c
diff -u src/bin/ed/main.c:1.25 src/bin/ed/main.c:1.26
--- src/bin/ed/main.c:1.25	Sun Aug 21 08:40:31 2011
+++ src/bin/ed/main.c	Sun Mar 23 05:06:42 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: main.c,v 1.25 2011/08/21 08:40:31 christos Exp $	*/
+/*	$NetBSD: main.c,v 1.26 2014/03/23 05:06:42 dholland Exp $	*/
 
 /* main.c: This file contains the main control and user-interface routines
    for the ed line editor. */
@@ -39,7 +39,7 @@ __COPYRIGHT(
 #if 0
 static char *rcsid = "@(#)main.c,v 1.1 1994/02/01 00:34:42 alm Exp";
 #else
-__RCSID("$NetBSD: main.c,v 1.25 2011/08/21 08:40:31 christos Exp $");
+__RCSID("$NetBSD: main.c,v 1.26 2014/03/23 05:06:42 dholland Exp $");
 #endif
 #endif /* not lint */
 
@@ -168,7 +168,7 @@ top:
 #endif
 	{
 		fputs("\n?\n", stderr);
-		sprintf(errmsg, "interrupt");
+		seterrmsg("interrupt");
 	} else {
 		init_buffers();
 		sigactive = 1;			/* enable signal handlers */
@@ -181,7 +181,7 @@ top:
 		} else if (argc) {
 			fputs("?\n", stderr);
 			if (**argv == '\0')
-				sprintf(errmsg, "invalid filename");
+				seterrmsg("invalid filename");
 			if (!isatty(0))
 				quit(2);
 		}
@@ -199,7 +199,7 @@ top:
 		} else if (n == 0) {
 			if (modified && !scripted) {
 				fputs("?\n", stderr);
-				sprintf(errmsg, "warning: file modified");
+				seterrmsg("warning: file modified");
 				if (!isatty(0)) {
 					if (garrulous) {
 						fprintf(stderr,
@@ -216,7 +216,7 @@ top:
 				quit(0);
 		} else if (ibuf[n - 1] != '\n') {
 			/* discard line */
-			sprintf(errmsg, "unexpected end-of-file");
+			seterrmsg("unexpected end-of-file");
 			clearerr(stdin);
 			status = ERR;
 			continue;
@@ -234,7 +234,7 @@ top:
 		case EMOD:
 			modified = 0;
 			fputs("?\n", stderr);		/* give warning */
-			sprintf(errmsg, "warning: file modified");
+			seterrmsg("warning: file modified");
 			if (!isatty(0)) {
 				if (garrulous) {
 					fprintf(stderr,
@@ -300,7 +300,7 @@ extract_addr_range(void)
 	ibufp++
 
 #define MUST_BE_FIRST() \
-	if (!first) { sprintf(errmsg, "invalid address"); return ERR; }
+	if (!first) { seterrmsg("invalid address"); return ERR; }
 
 /*  next_addr: return the next line address in the command buffer */
 long
@@ -370,7 +370,7 @@ next_addr(void)
 			if (ibufp == hd)
 				return EOF;
 			else if (addr < 0 || addr_last < addr) {
-				sprintf(errmsg, "invalid address");
+				seterrmsg("invalid address");
 				return ERR;
 			} else
 				return addr;
@@ -389,10 +389,10 @@ next_addr(void)
 	if (extract_addr_range() < 0) \
 		return ERR; \
 	else if (addr_cnt == 0) { \
-		sprintf(errmsg, "destination expected"); \
+		seterrmsg("destination expected"); \
 		return ERR; \
 	} else if (second_addr < 0 || addr_last < second_addr) { \
-		sprintf(errmsg, "invalid address"); \
+		seterrmsg("invalid address"); \
 		return ERR; \
 	} \
 	addr = second_addr; \
@@ -408,7 +408,7 @@ next_addr(void)
 	if (extract_addr_range() < 0) \
 		return ERR; \
 	if (second_addr < 0 || addr_last < second_addr) { \
-		sprintf(errmsg, "invalid address"); \
+		seterrmsg("invalid address"); \
 		return ERR; \
 	} \
 	addr = second_addr; \
@@ -436,7 +436,7 @@ next_addr(void)
 		} \
 	} while (!done); \
 	if (*ibufp++ != '\n') { \
-		sprintf(errmsg, "invalid command suffix"); \
+		seterrmsg("invalid command suffix"); \
 		return ERR; \
 	} \
 }
@@ -502,10 +502,10 @@ exec_command(void)
 		/* fall through */
 	case 'E':
 		if (addr_cnt > 0) {
-			sprintf(errmsg, "unexpected address");
+			seterrmsg("unexpected address");
 			return ERR;
 		} else if (!isspace((unsigned char)*ibufp)) {
-			sprintf(errmsg, "unexpected command suffix");
+			seterrmsg("unexpected command suffix");
 			return ERR;
 		} else if ((fnp = get_filename()) == NULL)
 			return ERR;
@@ -521,7 +521,7 @@ exec_command(void)
 			sizeof(old_filename) - 2);
 #ifdef BACKWARDS
 		if (*fnp == '\0' && *old_filename == '\0') {
-			sprintf(errmsg, "no current filename");
+			seterrmsg("no current filename");
 			return ERR;
 		}
 #endif
@@ -533,15 +533,15 @@ exec_command(void)
 		break;
 	case 'f':
 		if (addr_cnt > 0) {
-			sprintf(errmsg, "unexpected address");
+			seterrmsg("unexpected address");
 			return ERR;
 		} else if (!isspace((unsigned char)*ibufp)) {
-			sprintf(errmsg, "unexpected command suffix");
+			seterrmsg("unexpected command suffix");
 			return ERR;
 		} else if ((fnp = get_filename()) == NULL)
 			return ERR;
 		else if (*fnp == '!') {
-			sprintf(errmsg, "invalid redirection");
+			seterrmsg("invalid redirection");
 			return ERR;
 		}
 		GET_COMMAND_SUFFIX();
@@ -553,7 +553,7 @@ exec_command(void)
 	case 'G':
 	case 'V':
 		if (isglobal) {
-			sprintf(errmsg, "cannot nest global commands");
+			seterrmsg("cannot nest global commands");
 			return ERR;
 		} else if (check_addr_range(1, addr_last) < 0)
 			return ERR;
@@ -567,7 +567,7 @@ exec_command(void)
 		break;
 	case 'h':
 		if (addr_cnt > 0) {
-			sprintf(errmsg, "unexpected address");
+			seterrmsg("unexpected address");
 			return ERR;
 		}
 		GET_COMMAND_SUFFIX();
@@ -575,7 +575,7 @@ exec_command(void)
 		break;
 	case 'H':
 		if (addr_cnt > 0) {
-			sprintf(errmsg, "unexpected address");
+			seterrmsg("unexpected address");
 			return ERR;
 		}
 		GET_COMMAND_SUFFIX();
@@ -584,7 +584,7 @@ exec_command(void)
 		break;
 	case 'i':
 		if (second_addr == 0) {
-			sprintf(errmsg, "invalid address");
+			seterrmsg("invalid address");
 			return ERR;
 		}
 		GET_COMMAND_SUFFIX();
@@ -604,7 +604,7 @@ exec_command(void)
 	case 'k':
 		c = *ibufp++;
 		if (second_addr == 0) {
-			sprintf(errmsg, "invalid address");
+			seterrmsg("invalid address");
 			return ERR;
 		}
 		GET_COMMAND_SUFFIX();
@@ -624,7 +624,7 @@ exec_command(void)
 			return ERR;
 		GET_THIRD_ADDR(addr);
 		if (first_addr <= addr && addr < second_addr) {
-			sprintf(errmsg, "invalid destination");
+			seterrmsg("invalid destination");
 			return ERR;
 		}
 		GET_COMMAND_SUFFIX();
@@ -650,7 +650,7 @@ exec_command(void)
 		break;
 	case 'P':
 		if (addr_cnt > 0) {
-			sprintf(errmsg, "unexpected address");
+			seterrmsg("unexpected address");
 			return ERR;
 		}
 		GET_COMMAND_SUFFIX();
@@ -659,7 +659,7 @@ exec_command(void)
 	case 'q':
 	case 'Q':
 		if (addr_cnt > 0) {
-			sprintf(errmsg, "unexpected address");
+			seterrmsg("unexpected address");
 			return ERR;
 		}
 		GET_COMMAND_SUFFIX();
@@ -667,7 +667,7 @@ exec_command(void)
 		break;
 	case 'r':
 		if (!isspace((unsigned char)*ibufp)) {
-			sprintf(errmsg, "unexpected command suffix");
+			seterrmsg("unexpected command suffix");
 			return ERR;
 		} else if (addr_cnt == 0)
 			second_addr = addr_last;
@@ -679,7 +679,7 @@ exec_command(void)
 			strlcpy(old_filename, fnp, sizeof(old_filename) - 2);
 #ifdef BACKWARDS
 		if (*fnp == '\0' && *old_filename == '\0') {
-			sprintf(errmsg, "no current filename");
+			seterrmsg("no current filename");
 			return ERR;
 		}
 #endif
@@ -714,18 +714,18 @@ exec_command(void)
 				break;
 			default:
 				if (sflags) {
-					sprintf(errmsg, "invalid command suffix");
+					seterrmsg("invalid command suffix");
 					return ERR;
 				}
 			}
 		} while (sflags && *ibufp != '\n');
 		if (sflags && !pat) {
-			sprintf(errmsg, "no previous substitution");
+			seterrmsg("no previous substitution");
 			return ERR;
 		} else if (sflags & SGG)
 			sgnum = 0;		/* override numeric arg */
 		if (*ibufp != '\n' && *(ibufp + 1) == '\n') {
-			sprintf(errmsg, "invalid pattern delimiter");
+			seterrmsg("invalid pattern delimiter");
 			return ERR;
 		}
 		tpat = pat;
@@ -786,7 +786,7 @@ exec_command(void)
 		break;
 	case 'u':
 		if (addr_cnt > 0) {
-			sprintf(errmsg, "unexpected address");
+			seterrmsg("unexpected address");
 			return ERR;
 		}
 		GET_COMMAND_SUFFIX();
@@ -800,7 +800,7 @@ exec_command(void)
 			ibufp++;
 		}
 		if (!isspace((unsigned char)*ibufp)) {
-			sprintf(errmsg, "unexpected command suffix");
+			seterrmsg("unexpected command suffix");
 			return ERR;
 		} else if ((fnp = get_filename()) == NULL)
 			return ERR;
@@ -813,7 +813,7 @@ exec_command(void)
 			strlcpy(old_filename, fnp, sizeof(old_filename) - 2);
 #ifdef BACKWARDS
 		if (*fnp == '\0' && *old_filename == '\0') {
-			sprintf(errmsg, "no current filename");
+			seterrmsg("no current filename");
 			return ERR;
 		}
 #endif
@@ -827,14 +827,14 @@ exec_command(void)
 		break;
 	case 'x':
 		if (addr_cnt > 0) {
-			sprintf(errmsg, "unexpected address");
+			seterrmsg("unexpected address");
 			return ERR;
 		}
 		GET_COMMAND_SUFFIX();
 #ifdef DES
 		des = get_keyword();
 #else
-		sprintf(errmsg, "crypt unavailable");
+		seterrmsg("crypt unavailable");
 		return ERR;
 #endif
 		break;
@@ -859,7 +859,7 @@ exec_command(void)
 		break;
 	case '!':
 		if (addr_cnt > 0) {
-			sprintf(errmsg, "unexpected address");
+			seterrmsg("unexpected address");
 			return ERR;
 		} else if ((sflags = get_shell_command()) < 0)
 			return ERR;
@@ -878,7 +878,7 @@ exec_command(void)
 			return ERR;
 		break;
 	default:
-		sprintf(errmsg, "unknown command");
+		seterrmsg("unknown command");
 		return ERR;
 	}
 	return gflag;
@@ -895,7 +895,7 @@ check_addr_range(long n, long m)
 	}
 	if (first_addr > second_addr || 1 > first_addr ||
 	    second_addr > addr_last) {
-		sprintf(errmsg, "invalid address");
+		seterrmsg("invalid address");
 		return ERR;
 	}
 	return 0;
@@ -925,7 +925,7 @@ get_matching_node_addr(pattern_t *pat, i
 				return n;
 		}
 	} while (n != current_addr);
-	sprintf(errmsg, "no match");
+	seterrmsg("no match");
 	return  ERR;
 }
 
@@ -942,7 +942,7 @@ get_filename(void)
 	if (*ibufp != '\n') {
 		SKIP_BLANKS();
 		if (*ibufp == '\n') {
-			sprintf(errmsg, "invalid filename");
+			seterrmsg("invalid filename");
 			return NULL;
 		} else if ((ibufp = get_extended_line(&n, 1)) == NULL)
 			return NULL;
@@ -953,13 +953,13 @@ get_filename(void)
 			if (n) printf("%s\n", shcmd + 1);
 			return shcmd;
 		} else if (n - 1 > MAXPATHLEN) {
-			sprintf(errmsg, "filename too long");
+			seterrmsg("filename too long");
 			return  NULL;
 		}
 	}
 #ifndef BACKWARDS
 	else if (*old_filename == '\0') {
-		sprintf(errmsg, "no current filename");
+		seterrmsg("no current filename");
 		return  NULL;
 	}
 #endif
@@ -984,7 +984,7 @@ get_shell_command(void)
 	int j = 0;
 
 	if (red) {
-		sprintf(errmsg, "shell access restricted");
+		seterrmsg("shell access restricted");
 		return ERR;
 	} else if ((s = ibufp = get_extended_line(&j, 1)) == NULL)
 		return ERR;
@@ -1009,7 +1009,7 @@ get_shell_command(void)
 			else if (shcmd == NULL)
 #endif
 			{
-				sprintf(errmsg, "no previous command");
+				seterrmsg("no previous command");
 				return ERR;
 			} else {
 				REALLOC(buf, n, i + shcmdi, ERR);
@@ -1020,7 +1020,7 @@ get_shell_command(void)
 			break;
 		case '%':
 			if (*old_filename  == '\0') {
-				sprintf(errmsg, "no current filename");
+				seterrmsg("no current filename");
 				return ERR;
 			}
 			j = strlen(s = strip_escapes(old_filename));
@@ -1238,7 +1238,7 @@ display_lines(long from, long to, int gf
 	char *s;
 
 	if (!from) {
-		sprintf(errmsg, "invalid address");
+		seterrmsg("invalid address");
 		return ERR;
 	}
 	ep = get_addressed_line_node(INC_MOD(to, addr_last));
@@ -1263,7 +1263,7 @@ int
 mark_line_node(line_t *lp, int n)
 {
 	if (!islower(n)) {
-		sprintf(errmsg, "invalid mark character");
+		seterrmsg("invalid mark character");
 		return ERR;
 	} else if (mark[n - 'a'] == NULL)
 		markno++;
@@ -1277,7 +1277,7 @@ long
 get_marked_node_addr(int n)
 {
 	if (!islower(n)) {
-		sprintf(errmsg, "invalid mark character");
+		seterrmsg("invalid mark character");
 		return ERR;
 	}
 	return get_line_node_addr(mark[n - 'a']);
@@ -1306,7 +1306,7 @@ dup_line_node(line_t *lp)
 
 	if ((np = (line_t *) malloc(sizeof(line_t))) == NULL) {
 		fprintf(stderr, "%s\n", strerror(errno));
-		sprintf(errmsg, "out of memory");
+		seterrmsg("out of memory");
 		return NULL;
 	}
 	np->seek = lp->seek;
@@ -1418,7 +1418,7 @@ int
 is_legal_filename(char *s)
 {
 	if (red && (*s == '!' || !strcmp(s, "..") || strchr(s, '/'))) {
-		sprintf(errmsg, "shell access restricted");
+		seterrmsg("shell access restricted");
 		return 0;
 	}
 	return 1;

Index: src/bin/ed/re.c
diff -u src/bin/ed/re.c:1.20 src/bin/ed/re.c:1.21
--- src/bin/ed/re.c:1.20	Fri Jun 28 15:04:35 2013
+++ src/bin/ed/re.c	Sun Mar 23 05:06:42 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: re.c,v 1.20 2013/06/28 15:04:35 joerg Exp $	*/
+/*	$NetBSD: re.c,v 1.21 2014/03/23 05:06:42 dholland Exp $	*/
 
 /* re.c: This file contains the regular expression interface routines for
    the ed line editor. */
@@ -33,15 +33,26 @@
 #if 0
 static char *rcsid = "@(#)re.c,v 1.6 1994/02/01 00:34:43 alm Exp";
 #else
-__RCSID("$NetBSD: re.c,v 1.20 2013/06/28 15:04:35 joerg Exp $");
+__RCSID("$NetBSD: re.c,v 1.21 2014/03/23 05:06:42 dholland Exp $");
 #endif
 #endif /* not lint */
 
+#include <stdarg.h>
 #include "ed.h"
 
 
 char errmsg[MAXPATHLEN + 40] = "";
 
+void
+seterrmsg(const char *fmt, ...)
+{
+	va_list ap;
+
+	va_start(ap, fmt);
+	vsnprintf(errmsg, sizeof(errmsg), fmt, ap);
+	va_end(ap);
+}
+
 /* get_compiled_pattern: return pointer to compiled pattern from command 
    buffer */
 pattern_t *
@@ -54,10 +65,10 @@ get_compiled_pattern(void)
 	int n;
 
 	if ((delimiter = *ibufp) == ' ') {
-		sprintf(errmsg, "invalid pattern delimiter");
+		seterrmsg("invalid pattern delimiter");
 		return NULL;
 	} else if (delimiter == '\n' || *++ibufp == '\n' || *ibufp == delimiter) {
-		if (!expr) sprintf(errmsg, "no previous pattern");
+		if (!expr) seterrmsg("no previous pattern");
 		return expr;
 	} else if ((exps = extract_pattern(delimiter)) == NULL)
 		return NULL;
@@ -66,7 +77,7 @@ get_compiled_pattern(void)
 		regfree(expr);
 	else if ((expr = (pattern_t *) malloc(sizeof(pattern_t))) == NULL) {
 		fprintf(stderr, "%s\n", strerror(errno));
-		sprintf(errmsg, "out of memory");
+		seterrmsg("out of memory");
 		return NULL;
 	}
 	patlock = 0;
@@ -96,13 +107,13 @@ extract_pattern(int delimiter)
 			break;
 		case '[':
 			if ((nd = parse_char_class(nd + 1)) == NULL) {
-				sprintf(errmsg, "unbalanced brackets ([])");
+				seterrmsg("unbalanced brackets ([])");
 				return NULL;
 			}
 			break;
 		case '\\':
 			if (*++nd == '\n') {
-				sprintf(errmsg, "trailing backslash (\\)");
+				seterrmsg("trailing backslash (\\)");
 				return NULL;
 			}
 			break;

Index: src/bin/ed/undo.c
diff -u src/bin/ed/undo.c:1.5 src/bin/ed/undo.c:1.6
--- src/bin/ed/undo.c:1.5	Sat Mar 17 13:51:46 2007
+++ src/bin/ed/undo.c	Sun Mar 23 05:06:42 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: undo.c,v 1.5 2007/03/17 13:51:46 msaitoh Exp $	*/
+/*	$NetBSD: undo.c,v 1.6 2014/03/23 05:06:42 dholland Exp $	*/
 
 /* undo.c: This file contains the undo routines for the ed line editor */
 /*-
@@ -32,7 +32,7 @@
 #if 0
 static char *rcsid = "@(#)undo.c,v 1.1 1994/02/01 00:34:44 alm Exp";
 #else
-__RCSID("$NetBSD: undo.c,v 1.5 2007/03/17 13:51:46 msaitoh Exp $");
+__RCSID("$NetBSD: undo.c,v 1.6 2014/03/23 05:06:42 dholland Exp $");
 #endif
 #endif /* not lint */
 
@@ -54,7 +54,7 @@ push_undo_stack(int type, long from, lon
 	if (ustack == NULL &&
 	    (ustack = (undo_t *) malloc((usize = USIZE) * sizeof(undo_t))) == NULL) {
 		fprintf(stderr, "%s\n", strerror(errno));
-		sprintf(errmsg, "out of memory");
+		seterrmsg("out of memory");
 		return NULL;
 	}
 #endif
@@ -69,7 +69,7 @@ push_undo_stack(int type, long from, lon
 	}
 	/* out of memory - release undo stack */
 	fprintf(stderr, "%s\n", strerror(errno));
-	sprintf(errmsg, "out of memory");
+	seterrmsg("out of memory");
 	clear_undo_stack();
 	free(ustack);
 	ustack = NULL;
@@ -97,7 +97,7 @@ pop_undo_stack(void)
 	long o_addr_last = addr_last;
 
 	if (u_current_addr == -1 || u_addr_last == -1) {
-		sprintf(errmsg, "nothing to undo");
+		seterrmsg("nothing to undo");
 		return ERR;
 	} else if (u_p)
 		modified = 1;

Reply via email to