- djm@cvs.openbsd.org 2006/03/25 00:05:41
     [auth-bsdauth.c auth-skey.c auth.c auth2-chall.c channels.c]
     [clientloop.c deattack.c gss-genr.c kex.c key.c misc.c moduli.c]
     [monitor.c monitor_wrap.c packet.c scard.c sftp-server.c ssh-agent.c]
     [ssh-keyscan.c ssh.c sshconnect.c sshconnect2.c sshd.c uuencode.c]
     [xmalloc.c xmalloc.h]
     introduce xcalloc() and xasprintf() failure-checked allocations
     functions and use them throughout openssh

     xcalloc is particularly important because malloc(nmemb * size) is a
     dangerous idiom (subject to integer overflow) and it is time for it
     to die

     feedback and ok deraadt@
diff --git a/misc.c b/misc.c
index 1949dd4..bf7b1ed 100644
--- a/misc.c
+++ b/misc.c
@@ -172,9 +172,8 @@
 struct passwd *
 pwcopy(struct passwd *pw)
 {
-	struct passwd *copy = xmalloc(sizeof(*copy));
+	struct passwd *copy = xcalloc(1, sizeof(*copy));
 
-	memset(copy, 0, sizeof(*copy));
 	copy->pw_name = xstrdup(pw->pw_name);
 	copy->pw_passwd = xstrdup(pw->pw_passwd);
 	copy->pw_gecos = xstrdup(pw->pw_gecos);
@@ -697,8 +696,7 @@
 	u_int i, hl;
 
 	hl = l * 2 + 1;
-	r = xmalloc(hl);
-	*r = '\0';
+	r = xcalloc(1, hl);
 	for (i = 0; i < l; i++) {
 		snprintf(b, sizeof(b), "%02x", d[i]);
 		strlcat(r, b, hl);