Module Name:    src
Committed By:   christos
Date:           Tue Jul 23 10:18:52 UTC 2019

Modified Files:
        src/lib/libedit: chared.c chartype.c el.c el.h filecomplete.c hist.c
            keymacro.c literal.c map.c parse.c read.c readline.c search.c
            terminal.c vi.c

Log Message:
PR/54399: S�ren Tempel: Uninitialized memory access in libedit history.
Initialize the buffer using calloc. While here change all malloc(a * sizeof(b))
to calloc(a, sizeof(b)). XXX: should fix realloc similarly.


To generate a diff of this commit:
cvs rdiff -u -r1.58 -r1.59 src/lib/libedit/chared.c
cvs rdiff -u -r1.34 -r1.35 src/lib/libedit/chartype.c
cvs rdiff -u -r1.98 -r1.99 src/lib/libedit/el.c
cvs rdiff -u -r1.44 -r1.45 src/lib/libedit/el.h
cvs rdiff -u -r1.55 -r1.56 src/lib/libedit/filecomplete.c
cvs rdiff -u -r1.32 -r1.33 src/lib/libedit/hist.c
cvs rdiff -u -r1.23 -r1.24 src/lib/libedit/keymacro.c
cvs rdiff -u -r1.3 -r1.4 src/lib/libedit/literal.c
cvs rdiff -u -r1.51 -r1.52 src/lib/libedit/map.c
cvs rdiff -u -r1.41 -r1.42 src/lib/libedit/parse.c
cvs rdiff -u -r1.105 -r1.106 src/lib/libedit/read.c
cvs rdiff -u -r1.155 -r1.156 src/lib/libedit/readline.c
cvs rdiff -u -r1.48 -r1.49 src/lib/libedit/search.c
cvs rdiff -u -r1.38 -r1.39 src/lib/libedit/terminal.c
cvs rdiff -u -r1.62 -r1.63 src/lib/libedit/vi.c

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

Modified files:

Index: src/lib/libedit/chared.c
diff -u src/lib/libedit/chared.c:1.58 src/lib/libedit/chared.c:1.59
--- src/lib/libedit/chared.c:1.58	Tue Jul 23 05:47:16 2019
+++ src/lib/libedit/chared.c	Tue Jul 23 06:18:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: chared.c,v 1.58 2019/07/23 09:47:16 christos Exp $	*/
+/*	$NetBSD: chared.c,v 1.59 2019/07/23 10:18:52 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)chared.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: chared.c,v 1.58 2019/07/23 09:47:16 christos Exp $");
+__RCSID("$NetBSD: chared.c,v 1.59 2019/07/23 10:18:52 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -396,26 +396,22 @@ cv__endword(wchar_t *p, wchar_t *high, i
 libedit_private int
 ch_init(EditLine *el)
 {
-	el->el_line.buffer		= el_malloc(EL_BUFSIZ *
+	el->el_line.buffer		= el_calloc(EL_BUFSIZ,
 	    sizeof(*el->el_line.buffer));
 	if (el->el_line.buffer == NULL)
 		return -1;
 
-	(void) memset(el->el_line.buffer, 0, EL_BUFSIZ *
-	    sizeof(*el->el_line.buffer));
 	el->el_line.cursor		= el->el_line.buffer;
 	el->el_line.lastchar		= el->el_line.buffer;
 	el->el_line.limit		= &el->el_line.buffer[EL_BUFSIZ - EL_LEAVE];
 
-	el->el_chared.c_undo.buf	= el_malloc(EL_BUFSIZ *
+	el->el_chared.c_undo.buf	= el_calloc(EL_BUFSIZ,
 	    sizeof(*el->el_chared.c_undo.buf));
 	if (el->el_chared.c_undo.buf == NULL)
 		return -1;
-	(void) memset(el->el_chared.c_undo.buf, 0, EL_BUFSIZ *
-	    sizeof(*el->el_chared.c_undo.buf));
 	el->el_chared.c_undo.len	= -1;
 	el->el_chared.c_undo.cursor	= 0;
-	el->el_chared.c_redo.buf	= el_malloc(EL_BUFSIZ *
+	el->el_chared.c_redo.buf	= el_calloc(EL_BUFSIZ,
 	    sizeof(*el->el_chared.c_redo.buf));
 	if (el->el_chared.c_redo.buf == NULL)
 		return -1;
@@ -426,12 +422,10 @@ ch_init(EditLine *el)
 	el->el_chared.c_vcmd.action	= NOP;
 	el->el_chared.c_vcmd.pos	= el->el_line.buffer;
 
-	el->el_chared.c_kill.buf	= el_malloc(EL_BUFSIZ *
+	el->el_chared.c_kill.buf	= el_calloc(EL_BUFSIZ,
 	    sizeof(*el->el_chared.c_kill.buf));
 	if (el->el_chared.c_kill.buf == NULL)
 		return -1;
-	(void) memset(el->el_chared.c_kill.buf, 0, EL_BUFSIZ *
-	    sizeof(*el->el_chared.c_kill.buf));
 	el->el_chared.c_kill.mark	= el->el_line.buffer;
 	el->el_chared.c_kill.last	= el->el_chared.c_kill.buf;
 	el->el_chared.c_resizefun	= NULL;

Index: src/lib/libedit/chartype.c
diff -u src/lib/libedit/chartype.c:1.34 src/lib/libedit/chartype.c:1.35
--- src/lib/libedit/chartype.c:1.34	Sun Nov 25 11:20:28 2018
+++ src/lib/libedit/chartype.c	Tue Jul 23 06:18:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: chartype.c,v 1.34 2018/11/25 16:20:28 christos Exp $	*/
+/*	$NetBSD: chartype.c,v 1.35 2019/07/23 10:18:52 christos Exp $	*/
 
 /*-
  * Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
  */
 #include "config.h"
 #if !defined(lint) && !defined(SCCSID)
-__RCSID("$NetBSD: chartype.c,v 1.34 2018/11/25 16:20:28 christos Exp $");
+__RCSID("$NetBSD: chartype.c,v 1.35 2019/07/23 10:18:52 christos Exp $");
 #endif /* not lint && not SCCSID */
 
 #include <ctype.h>
@@ -157,7 +157,7 @@ ct_decode_argv(int argc, const char *arg
 		if (ct_conv_wbuff_resize(conv, bufspace + CT_BUFSIZ) == -1)
 			return NULL;
 
-	wargv = el_malloc((size_t)(argc + 1) * sizeof(*wargv));
+	wargv = el_calloc((size_t)(argc + 1), sizeof(*wargv));
 
 	for (i = 0, p = conv->wbuff; i < argc; ++i) {
 		if (!argv[i]) {   /* don't pass null pointers to mbstowcs */

Index: src/lib/libedit/el.c
diff -u src/lib/libedit/el.c:1.98 src/lib/libedit/el.c:1.99
--- src/lib/libedit/el.c:1.98	Fri Apr 26 12:56:57 2019
+++ src/lib/libedit/el.c	Tue Jul 23 06:18:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: el.c,v 1.98 2019/04/26 16:56:57 christos Exp $	*/
+/*	$NetBSD: el.c,v 1.99 2019/07/23 10:18:52 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)el.c	8.2 (Berkeley) 1/3/94";
 #else
-__RCSID("$NetBSD: el.c,v 1.98 2019/04/26 16:56:57 christos Exp $");
+__RCSID("$NetBSD: el.c,v 1.99 2019/07/23 10:18:52 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -71,13 +71,11 @@ libedit_private EditLine *
 el_init_internal(const char *prog, FILE *fin, FILE *fout, FILE *ferr,
     int fdin, int fdout, int fderr, int flags)
 {
-	EditLine *el = el_malloc(sizeof(*el));
+	EditLine *el = el_calloc(1, sizeof(*el));
 
 	if (el == NULL)
 		return NULL;
 
-	memset(el, 0, sizeof(EditLine));
-
 	el->el_infile = fin;
 	el->el_outfile = fout;
 	el->el_errfile = ferr;
@@ -534,7 +532,7 @@ el_source(EditLine *el, const char *fnam
 			if ((ptr = getenv("HOME")) == NULL)
 				return -1;
 			plen += strlen(ptr);
-			if ((path = el_malloc(plen * sizeof(*path))) == NULL)
+			if ((path = el_calloc(plen, sizeof(*path))) == NULL)
 				return -1;
 			(void)snprintf(path, plen, "%s%s", ptr,
 				elpath + (*ptr == '\0'));

Index: src/lib/libedit/el.h
diff -u src/lib/libedit/el.h:1.44 src/lib/libedit/el.h:1.45
--- src/lib/libedit/el.h:1.44	Sun Nov 18 12:09:39 2018
+++ src/lib/libedit/el.h	Tue Jul 23 06:18:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: el.h,v 1.44 2018/11/18 17:09:39 christos Exp $	*/
+/*	$NetBSD: el.h,v 1.45 2019/07/23 10:18:52 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -89,6 +89,7 @@ typedef struct el_state_t {
  * Until we come up with something better...
  */
 #define	el_malloc(a)	malloc(a)
+#define	el_calloc(a,b)	calloc(a, b)
 #define	el_realloc(a,b)	realloc(a, b)
 #define	el_free(a)	free(a)
 

Index: src/lib/libedit/filecomplete.c
diff -u src/lib/libedit/filecomplete.c:1.55 src/lib/libedit/filecomplete.c:1.56
--- src/lib/libedit/filecomplete.c:1.55	Sat Apr 20 04:44:10 2019
+++ src/lib/libedit/filecomplete.c	Tue Jul 23 06:18:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: filecomplete.c,v 1.55 2019/04/20 08:44:10 abhinav Exp $	*/
+/*	$NetBSD: filecomplete.c,v 1.56 2019/07/23 10:18:52 christos Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include "config.h"
 #if !defined(lint) && !defined(SCCSID)
-__RCSID("$NetBSD: filecomplete.c,v 1.55 2019/04/20 08:44:10 abhinav Exp $");
+__RCSID("$NetBSD: filecomplete.c,v 1.56 2019/07/23 10:18:52 christos Exp $");
 #endif /* not lint && not SCCSID */
 
 #include <sys/types.h>
@@ -83,7 +83,7 @@ fn_tilde_expand(const char *txt)
 	} else {
 		/* text until string after slash */
 		len = (size_t)(temp - txt + 1);
-		temp = el_malloc(len * sizeof(*temp));
+		temp = el_calloc(len, sizeof(*temp));
 		if (temp == NULL)
 			return NULL;
 		(void)strncpy(temp, txt + 1, len - 2);
@@ -118,7 +118,7 @@ fn_tilde_expand(const char *txt)
 	txt += len;
 
 	len = strlen(pass->pw_dir) + 1 + strlen(txt) + 1;
-	temp = el_malloc(len * sizeof(*temp));
+	temp = el_calloc(len, sizeof(*temp));
 	if (temp == NULL)
 		return NULL;
 	(void)snprintf(temp, len, "%s/%s", pass->pw_dir, txt);
@@ -179,7 +179,7 @@ unescape_string(const wchar_t *string, s
 {
 	size_t i;
 	size_t j = 0;
-	wchar_t *unescaped = el_malloc(sizeof(*string) * (length + 1));
+	wchar_t *unescaped = el_calloc(length + 1, sizeof(*string));
 	if (unescaped == NULL)
 		return NULL;
 	for (i = 0; i < length ; i++) {
@@ -410,7 +410,7 @@ fn_filename_completion_function(const ch
 #endif
 
 		len = strlen(dirname) + len + 1;
-		temp = el_malloc(len * sizeof(*temp));
+		temp = el_calloc(len, sizeof(*temp));
 		if (temp == NULL)
 			return NULL;
 		(void)snprintf(temp, len, "%s%s", dirname, entry->d_name);
@@ -486,7 +486,7 @@ completion_matches(const char *text, cha
 		max_equal = i;
 	}
 
-	retstr = el_malloc((max_equal + 1) * sizeof(*retstr));
+	retstr = el_calloc(max_equal + 1, sizeof(*retstr));
 	if (retstr == NULL) {
 		el_free(match_list);
 		return NULL;

Index: src/lib/libedit/hist.c
diff -u src/lib/libedit/hist.c:1.32 src/lib/libedit/hist.c:1.33
--- src/lib/libedit/hist.c:1.32	Sun Mar  5 14:23:58 2017
+++ src/lib/libedit/hist.c	Tue Jul 23 06:18:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: hist.c,v 1.32 2017/03/05 19:23:58 christos Exp $	*/
+/*	$NetBSD: hist.c,v 1.33 2019/07/23 10:18:52 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)hist.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: hist.c,v 1.32 2017/03/05 19:23:58 christos Exp $");
+__RCSID("$NetBSD: hist.c,v 1.33 2019/07/23 10:18:52 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -59,7 +59,7 @@ hist_init(EditLine *el)
 
 	el->el_history.fun = NULL;
 	el->el_history.ref = NULL;
-	el->el_history.buf = el_malloc(EL_BUFSIZ * sizeof(*el->el_history.buf));
+	el->el_history.buf = el_calloc(EL_BUFSIZ, sizeof(*el->el_history.buf));
 	el->el_history.sz  = EL_BUFSIZ;
 	if (el->el_history.buf == NULL)
 		return -1;

Index: src/lib/libedit/keymacro.c
diff -u src/lib/libedit/keymacro.c:1.23 src/lib/libedit/keymacro.c:1.24
--- src/lib/libedit/keymacro.c:1.23	Tue May 24 11:00:45 2016
+++ src/lib/libedit/keymacro.c	Tue Jul 23 06:18:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: keymacro.c,v 1.23 2016/05/24 15:00:45 christos Exp $	*/
+/*	$NetBSD: keymacro.c,v 1.24 2019/07/23 10:18:52 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)key.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: keymacro.c,v 1.23 2016/05/24 15:00:45 christos Exp $");
+__RCSID("$NetBSD: keymacro.c,v 1.24 2019/07/23 10:18:52 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -105,7 +105,7 @@ libedit_private int
 keymacro_init(EditLine *el)
 {
 
-	el->el_keymacro.buf = el_malloc(KEY_BUFSIZ *
+	el->el_keymacro.buf = el_calloc(KEY_BUFSIZ,
 	    sizeof(*el->el_keymacro.buf));
 	if (el->el_keymacro.buf == NULL)
 		return -1;

Index: src/lib/libedit/literal.c
diff -u src/lib/libedit/literal.c:1.3 src/lib/libedit/literal.c:1.4
--- src/lib/libedit/literal.c:1.3	Fri Jun 30 16:26:52 2017
+++ src/lib/libedit/literal.c	Tue Jul 23 06:18:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: literal.c,v 1.3 2017/06/30 20:26:52 kre Exp $	*/
+/*	$NetBSD: literal.c,v 1.4 2019/07/23 10:18:52 christos Exp $	*/
 
 /*-
  * Copyright (c) 2017 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include "config.h"
 #if !defined(lint) && !defined(SCCSID)
-__RCSID("$NetBSD: literal.c,v 1.3 2017/06/30 20:26:52 kre Exp $");
+__RCSID("$NetBSD: literal.c,v 1.4 2019/07/23 10:18:52 christos Exp $");
 #endif /* not lint && not SCCSID */
 
 /*
@@ -97,9 +97,9 @@ literal_add(EditLine *el, const wchar_t 
 	if (b == NULL)
 		return 0;
 
-	for (n = 0, i = 0; i < len; i++)
-		n += ct_encode_char(b + n, w - n, buf[i]);
-	n += ct_encode_char(b + n, w - n, end[1]);
+	for (n = 0, i = 0; i < len; i++) {
+		n += ct_encode_char(b + n, (size_t)(w - n), buf[i]);
+	n += ct_encode_char(b + n, (size_t)(w - n), end[1]);
 	b[n] = '\0';
 
 	/*

Index: src/lib/libedit/map.c
diff -u src/lib/libedit/map.c:1.51 src/lib/libedit/map.c:1.52
--- src/lib/libedit/map.c:1.51	Mon May  9 17:46:56 2016
+++ src/lib/libedit/map.c	Tue Jul 23 06:18:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: map.c,v 1.51 2016/05/09 21:46:56 christos Exp $	*/
+/*	$NetBSD: map.c,v 1.52 2019/07/23 10:18:52 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)map.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: map.c,v 1.51 2016/05/09 21:46:56 christos Exp $");
+__RCSID("$NetBSD: map.c,v 1.52 2019/07/23 10:18:52 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -913,21 +913,21 @@ map_init(EditLine *el)
 		EL_ABORT((el->errfile, "Vi insert map incorrect\n"));
 #endif
 
-	el->el_map.alt = el_malloc(sizeof(*el->el_map.alt) * N_KEYS);
+	el->el_map.alt = el_calloc(N_KEYS, sizeof(*el->el_map.alt));
 	if (el->el_map.alt == NULL)
 		return -1;
-	el->el_map.key = el_malloc(sizeof(*el->el_map.key) * N_KEYS);
+	el->el_map.key = el_calloc(N_KEYS, sizeof(*el->el_map.key));
 	if (el->el_map.key == NULL)
 		return -1;
 	el->el_map.emacs = el_map_emacs;
 	el->el_map.vic = el_map_vi_command;
 	el->el_map.vii = el_map_vi_insert;
-	el->el_map.help = el_malloc(sizeof(*el->el_map.help) * EL_NUM_FCNS);
+	el->el_map.help = el_calloc(EL_NUM_FCNS, sizeof(*el->el_map.help));
 	if (el->el_map.help == NULL)
 		return -1;
 	(void) memcpy(el->el_map.help, el_func_help,
 	    sizeof(*el->el_map.help) * EL_NUM_FCNS);
-	el->el_map.func = el_malloc(sizeof(*el->el_map.func) * EL_NUM_FCNS);
+	el->el_map.func = el_calloc(EL_NUM_FCNS, sizeof(*el->el_map.func));
 	if (el->el_map.func == NULL)
 		return -1;
 	memcpy(el->el_map.func, el_func, sizeof(*el->el_map.func)

Index: src/lib/libedit/parse.c
diff -u src/lib/libedit/parse.c:1.41 src/lib/libedit/parse.c:1.42
--- src/lib/libedit/parse.c:1.41	Wed Nov 28 22:10:20 2018
+++ src/lib/libedit/parse.c	Tue Jul 23 06:18:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: parse.c,v 1.41 2018/11/29 03:10:20 christos Exp $	*/
+/*	$NetBSD: parse.c,v 1.42 2019/07/23 10:18:52 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)parse.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: parse.c,v 1.41 2018/11/29 03:10:20 christos Exp $");
+__RCSID("$NetBSD: parse.c,v 1.42 2019/07/23 10:18:52 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -112,7 +112,7 @@ el_wparse(EditLine *el, int argc, const 
 		if (ptr == argv[0])
 			return 0;
 		l = (size_t)(ptr - argv[0]);
-		tprog = el_malloc((l + 1) * sizeof(*tprog));
+		tprog = el_calloc(l + 1, sizeof(*tprog));
 		if (tprog == NULL)
 			return 0;
 		(void) wcsncpy(tprog, argv[0], l);

Index: src/lib/libedit/read.c
diff -u src/lib/libedit/read.c:1.105 src/lib/libedit/read.c:1.106
--- src/lib/libedit/read.c:1.105	Sun Nov 25 11:21:04 2018
+++ src/lib/libedit/read.c	Tue Jul 23 06:18:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: read.c,v 1.105 2018/11/25 16:21:04 christos Exp $	*/
+/*	$NetBSD: read.c,v 1.106 2019/07/23 10:18:52 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)read.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: read.c,v 1.105 2018/11/25 16:21:04 christos Exp $");
+__RCSID("$NetBSD: read.c,v 1.106 2019/07/23 10:18:52 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -89,8 +89,7 @@ read_init(EditLine *el)
 		return -1;
 
 	ma = &el->el_read->macros;
-	if ((ma->macro = el_malloc(EL_MAXMACRO *
-	    sizeof(*ma->macro))) == NULL) {
+	if ((ma->macro = el_calloc(EL_MAXMACRO, sizeof(*ma->macro))) == NULL) {
 		free(el->el_read);
 		return -1;
 	}

Index: src/lib/libedit/readline.c
diff -u src/lib/libedit/readline.c:1.155 src/lib/libedit/readline.c:1.156
--- src/lib/libedit/readline.c:1.155	Fri Jun  7 11:21:48 2019
+++ src/lib/libedit/readline.c	Tue Jul 23 06:18:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: readline.c,v 1.155 2019/06/07 15:21:48 christos Exp $	*/
+/*	$NetBSD: readline.c,v 1.156 2019/07/23 10:18:52 christos Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
 
 #include "config.h"
 #if !defined(lint) && !defined(SCCSID)
-__RCSID("$NetBSD: readline.c,v 1.155 2019/06/07 15:21:48 christos Exp $");
+__RCSID("$NetBSD: readline.c,v 1.156 2019/07/23 10:18:52 christos Exp $");
 #endif /* not lint && not SCCSID */
 
 #include <sys/types.h>
@@ -515,7 +515,7 @@ _rl_compat_sub(const char *str, const ch
 		} else
 			s++;
 	}
-	r = result = el_malloc((len + 1) * sizeof(*r));
+	r = result = el_calloc(len + 1, sizeof(*r));
 	if (result == NULL)
 		return NULL;
 	s = str;
@@ -605,7 +605,7 @@ get_history_event(const char *cmd, int *
 	else if (len == 0)
 		return NULL;
 	else {
-		if ((pat = el_malloc((len + 1) * sizeof(*pat))) == NULL)
+		if ((pat = el_calloc(len + 1, sizeof(*pat))) == NULL)
 			return NULL;
 		(void)strncpy(pat, cmd + begin, len);
 		pat[len] = '\0';
@@ -699,7 +699,7 @@ _history_expand_command(const char *comm
 	} else {
 		if (command[offs + 1] == '#') {
 			/* use command so far */
-			if ((aptr = el_malloc((offs + 1) * sizeof(*aptr)))
+			if ((aptr = el_calloc(offs + 1, sizeof(*aptr)))
 			    == NULL)
 				return -1;
 			(void)strncpy(aptr, command, offs);
@@ -933,7 +933,7 @@ history_expand(char *str, char **output)
 	*output = NULL;
 	if (str[0] == history_subst_char) {
 		/* ^foo^foo2^ is equivalent to !!:s^foo^foo2^ */
-		*output = el_malloc((strlen(str) + 4 + 1) * sizeof(**output));
+		*output = el_calloc(strlen(str) + 4 + 1, sizeof(**output));
 		if (*output == NULL)
 			return 0;
 		(*output)[0] = (*output)[1] = history_expansion_char;
@@ -1081,7 +1081,7 @@ history_arg_extract(int start, int end, 
 	for (i = (size_t)start, len = 0; i <= (size_t)end; i++)
 		len += strlen(arr[i]) + 1;
 	len++;
-	result = el_malloc(len * sizeof(*result));
+	result = el_calloc(len, sizeof(*result));
 	if (result == NULL)
 		goto out;
 
@@ -1143,7 +1143,7 @@ history_tokenize(const char *str)
 			result = nresult;
 		}
 		len = (size_t)i - (size_t)start;
-		temp = el_malloc((size_t)(len + 1) * sizeof(*temp));
+		temp = el_calloc(len + 1, sizeof(*temp));
 		if (temp == NULL) {
 			for (i = 0; i < idx; i++)
 				el_free(result[i]);
@@ -2267,7 +2267,7 @@ rl_completion_matches(const char *str, r
 
 	len = 1;
 	max = 10;
-	if ((list = el_malloc(max * sizeof(*list))) == NULL)
+	if ((list = el_calloc(max, sizeof(*list))) == NULL)
 		return NULL;
 
 	while ((match = (*fun)(str, (int)(len - 1))) != NULL) {
@@ -2302,7 +2302,7 @@ rl_completion_matches(const char *str, r
 		if ((list[0] = strdup(str)) == NULL)
 			goto out;
 	} else {
-		if ((list[0] = el_malloc((min + 1) * sizeof(*list[0]))) == NULL)
+		if ((list[0] = el_calloc(min + 1, sizeof(*list[0]))) == NULL)
 			goto out;
 		(void)memcpy(list[0], list[1], min);
 		list[0][min] = '\0';

Index: src/lib/libedit/search.c
diff -u src/lib/libedit/search.c:1.48 src/lib/libedit/search.c:1.49
--- src/lib/libedit/search.c:1.48	Mon Feb 26 12:36:14 2018
+++ src/lib/libedit/search.c	Tue Jul 23 06:18:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: search.c,v 1.48 2018/02/26 17:36:14 christos Exp $	*/
+/*	$NetBSD: search.c,v 1.49 2019/07/23 10:18:52 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)search.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: search.c,v 1.48 2018/02/26 17:36:14 christos Exp $");
+__RCSID("$NetBSD: search.c,v 1.49 2019/07/23 10:18:52 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -70,7 +70,7 @@ libedit_private int
 search_init(EditLine *el)
 {
 
-	el->el_search.patbuf = el_malloc(EL_BUFSIZ *
+	el->el_search.patbuf = el_calloc(EL_BUFSIZ,
 	    sizeof(*el->el_search.patbuf));
 	if (el->el_search.patbuf == NULL)
 		return -1;

Index: src/lib/libedit/terminal.c
diff -u src/lib/libedit/terminal.c:1.38 src/lib/libedit/terminal.c:1.39
--- src/lib/libedit/terminal.c:1.38	Sun Jun 30 09:30:15 2019
+++ src/lib/libedit/terminal.c	Tue Jul 23 06:18:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: terminal.c,v 1.38 2019/06/30 13:30:15 christos Exp $	*/
+/*	$NetBSD: terminal.c,v 1.39 2019/07/23 10:18:52 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)term.c	8.2 (Berkeley) 4/30/95";
 #else
-__RCSID("$NetBSD: terminal.c,v 1.38 2019/06/30 13:30:15 christos Exp $");
+__RCSID("$NetBSD: terminal.c,v 1.39 2019/07/23 10:18:52 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -269,31 +269,27 @@ libedit_private int
 terminal_init(EditLine *el)
 {
 
-	el->el_terminal.t_buf = el_malloc(TC_BUFSIZE *
+	el->el_terminal.t_buf = el_calloc(TC_BUFSIZE,
 	    sizeof(*el->el_terminal.t_buf));
 	if (el->el_terminal.t_buf == NULL)
 		goto fail1;
-	el->el_terminal.t_cap = el_malloc(TC_BUFSIZE *
+	el->el_terminal.t_cap = el_calloc(TC_BUFSIZE,
 	    sizeof(*el->el_terminal.t_cap));
 	if (el->el_terminal.t_cap == NULL)
 		goto fail2;
-	el->el_terminal.t_fkey = el_malloc(A_K_NKEYS *
+	el->el_terminal.t_fkey = el_calloc(A_K_NKEYS,
 	    sizeof(*el->el_terminal.t_fkey));
 	if (el->el_terminal.t_fkey == NULL)
 		goto fail3;
 	el->el_terminal.t_loc = 0;
-	el->el_terminal.t_str = el_malloc(T_str *
+	el->el_terminal.t_str = el_calloc(T_str,
 	    sizeof(*el->el_terminal.t_str));
 	if (el->el_terminal.t_str == NULL)
 		goto fail4;
-	(void) memset(el->el_terminal.t_str, 0, T_str *
-	    sizeof(*el->el_terminal.t_str));
-	el->el_terminal.t_val = el_malloc(T_val *
+	el->el_terminal.t_val = el_calloc(T_val,
 	    sizeof(*el->el_terminal.t_val));
 	if (el->el_terminal.t_val == NULL)
 		goto fail5;
-	(void) memset(el->el_terminal.t_val, 0, T_val *
-	    sizeof(*el->el_terminal.t_val));
 	(void) terminal_set(el, NULL);
 	terminal_init_arrow(el);
 	return 0;
@@ -426,11 +422,11 @@ terminal_alloc_buffer(EditLine *el)
 	coord_t *c = &el->el_terminal.t_size;
 	int i;
 
-	b =  el_malloc(sizeof(*b) * (size_t)(c->v + 1));
+	b =  el_calloc((size_t)(c->v + 1), sizeof(*b));
 	if (b == NULL)
 		return NULL;
 	for (i = 0; i < c->v; i++) {
-		b[i] = el_malloc(sizeof(**b) * (size_t)(c->h + 1));
+		b[i] = el_calloc((size_t)(c->h + 1), sizeof(**b));
 		if (b[i] == NULL) {
 			while (--i >= 0)
 				el_free(b[i]);

Index: src/lib/libedit/vi.c
diff -u src/lib/libedit/vi.c:1.62 src/lib/libedit/vi.c:1.63
--- src/lib/libedit/vi.c:1.62	Mon May  9 17:46:56 2016
+++ src/lib/libedit/vi.c	Tue Jul 23 06:18:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: vi.c,v 1.62 2016/05/09 21:46:56 christos Exp $	*/
+/*	$NetBSD: vi.c,v 1.63 2019/07/23 10:18:52 christos Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)vi.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: vi.c,v 1.62 2016/05/09 21:46:56 christos Exp $");
+__RCSID("$NetBSD: vi.c,v 1.63 2019/07/23 10:18:52 christos Exp $");
 #endif
 #endif /* not lint && not SCCSID */
 
@@ -1019,10 +1019,10 @@ vi_histedit(EditLine *el, wint_t c __att
 		return CC_ERROR;
 	len = (size_t)(el->el_line.lastchar - el->el_line.buffer);
 #define TMP_BUFSIZ (EL_BUFSIZ * MB_LEN_MAX)
-	cp = el_malloc(TMP_BUFSIZ * sizeof(*cp));
+	cp = el_calloc(TMP_BUFSIZ, sizeof(*cp));
 	if (cp == NULL)
 		goto error;
-	line = el_malloc(len * sizeof(*line) + 1);
+	line = el_calloc(len + 1, sizeof(*line));
 	if (line == NULL)
 		goto error;
 	wcsncpy(line, el->el_line.buffer, len);

Reply via email to