aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2011-02-22 15:38:14 +0000
committerCorinna Vinschen <corinna@vinschen.de>2011-02-22 15:38:14 +0000
commitd9db1bc55561a62967494227d84247618d434817 (patch)
tree10dd53d21912489f14efe14cbf52dd183a53c5ba
parent12374d7d2f77d5a309f1835b3177798c47307807 (diff)
downloadnewlib-d9db1bc55561a62967494227d84247618d434817.zip
newlib-d9db1bc55561a62967494227d84247618d434817.tar.gz
newlib-d9db1bc55561a62967494227d84247618d434817.tar.bz2
* libc/stdio/fmemopen.c (fmemopen): Fix EINVAL condition. Avoid SEGV
if incoming buffer is NULL.
-rw-r--r--newlib/ChangeLog5
-rw-r--r--newlib/libc/stdio/fmemopen.c4
2 files changed, 7 insertions, 2 deletions
diff --git a/newlib/ChangeLog b/newlib/ChangeLog
index e65008b..4b48ebf 100644
--- a/newlib/ChangeLog
+++ b/newlib/ChangeLog
@@ -1,3 +1,8 @@
+2011-02-22 Corinna Vinschen <vinschen@redhat.com>
+
+ * libc/stdio/fmemopen.c (fmemopen): Fix EINVAL condition. Avoid SEGV
+ if incoming buffer is NULL.
+
2011-02-09 Eric Blake <eblake@redhat.com>
* libc/include/string.h (strerror_r): Update declaration.
diff --git a/newlib/libc/stdio/fmemopen.c b/newlib/libc/stdio/fmemopen.c
index 4458d21..5218e8a 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;
}