Avoid malloc(0) in getdents parsers

On end of directory, getdents returns 0.  This return value is used to
then try and do malloc(0), but on some systems this will always return
NULL.  Since the code won't read the pointer in question if len is 0,
then don't bother calling malloc(0) and set the pointer to NULL ourself.
* file.c (sys_getdents, sys_getdents64): Avoid malloc(0) call.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
Mike Frysinger 2009-10-07 20:41:56 -04:00 committed by Dmitry V. Levin
parent 8bfc23e056
commit 229738ce4e

6
file.c
View File

@ -2337,7 +2337,8 @@ sys_getdents(struct tcb *tcp)
return 0;
}
len = tcp->u_rval;
if ((buf = malloc(len)) == NULL) {
buf = len ? malloc(len) : NULL;
if (len && !buf) {
tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
fprintf(stderr, "out of memory\n");
return 0;
@ -2420,7 +2421,8 @@ sys_getdents64(struct tcb *tcp)
return 0;
}
len = tcp->u_rval;
if ((buf = malloc(len)) == NULL) {
buf = len ? malloc(len) : NULL;
if (len && !buf) {
tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
fprintf(stderr, "out of memory\n");
return 0;