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:
parent
8bfc23e056
commit
229738ce4e
6
file.c
6
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;
|
||||
|
Loading…
Reference in New Issue
Block a user