diff --git a/newlib/ChangeLog b/newlib/ChangeLog index e65008bee..4b48ebf06 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,8 @@ +2011-02-22 Corinna Vinschen + + * libc/stdio/fmemopen.c (fmemopen): Fix EINVAL condition. Avoid SEGV + if incoming buffer is NULL. + 2011-02-09 Eric Blake * libc/include/string.h (strerror_r): Update declaration. diff --git a/newlib/libc/stdio/fmemopen.c b/newlib/libc/stdio/fmemopen.c index 4458d2176..5218e8a98 100644 --- a/newlib/libc/stdio/fmemopen.c +++ b/newlib/libc/stdio/fmemopen.c @@ -281,7 +281,7 @@ _DEFUN(_fmemopen_r, (ptr, buf, size, mode), if ((flags = __sflags (ptr, mode, &dummy)) == 0) return NULL; - if (!size || !(buf || flags & __SAPP)) + if (!size || !(buf || flags & __SRW)) { ptr->_errno = EINVAL; return NULL; @@ -310,7 +310,7 @@ _DEFUN(_fmemopen_r, (ptr, buf, size, mode), { /* r+/w+/a+, and no buf: file starts empty. */ c->buf = (char *) (c + 1); - *(char *) buf = '\0'; + c->buf[0] = '\0'; c->pos = c->eof = 0; c->append = (flags & __SAPP) != 0; }