When getdents finishes processing, it returns 0.  Strace uses this 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() and set the pointer to NULL our self.

* file.c (sys_getdents, sys_getdents64): Ignore malloc(0) == NULL.

Signed-off-by: Mike Frysinger <vap...@gentoo.org>
---
v2
        - revised code based on feedback from Dmitry

 file.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/file.c b/file.c
index c6e3b52..4a2512f 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;
-- 
1.6.5.rc2


------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to