From 229738ce4e5432023024d15b74541222228eb7b3 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Wed, 7 Oct 2009 20:41:56 -0400 Subject: [PATCH] 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 --- file.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/file.c b/file.c index c6e3b52b..4a2512f4 100644 --- a/file.c +++ b/file.c @@ -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; -- 2.40.0