The diff below removes the check for siz == 0 in xmalloc() because it is
unnecessary.
I was curious about the check for siz == 0 in xmalloc() when I first saw
it, so I dug in further and came to the conclusion it's unnecessary:
* It errors out immediately, so aside from the "zero size" specific error
message (which users won't see anyways if they start cwm from .xinitrc
or .xsession) it's not offering any benefit
* malloc() accepts size zero and returns a pointer to memory that will
SEGFAULT when accessed anyways, so removing this check isn't going to
hide any errors
* All but one of the existing calls to xmalloc() uses sizeof anyways, so
there's actually very little chance of siz == 0 in practice
* In fact, there's currently zero chance siz == 0 because the other call
(in kbfunc_ssh(), kbfunc.c:335) actually passes the value len + 1, so
even if len was zero -- which it isn't: the value of len comes from
the fgetln() call on line 330, and fgetln guarantees len > 0 on
success -- the argument to xmalloc() will always be >= 1 (Unless a
user has line in ~/.ssh/known_hosts that is SIZE_MAX bytes long, but
then the memcpy() on the very next line will SEGFAULT anyways)
Index: xmalloc.c
===================================================================
RCS file: /work/cvsroot/xenocara/app/cwm/xmalloc.c,v
retrieving revision 1.12
diff -p -u -r1.12 xmalloc.c
--- xmalloc.c 17 Dec 2013 16:12:18 -0000 1.12
+++ xmalloc.c 24 Apr 2014 03:24:01 -0000
@@ -37,8 +37,6 @@ xmalloc(size_t siz)
{
void *p;
- if (siz == 0)
- errx(1, "xmalloc: zero size");
if ((p = malloc(siz)) == NULL)
err(1, "malloc");