about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPaul Pluzhnikov <ppluzhnikov@google.com>2015-09-01 08:48:15 -0700
committerPaul Pluzhnikov <ppluzhnikov@google.com>2015-09-01 08:48:15 -0700
commit2d8e36e691f460aeeb3362fd44c71cafc7bb5852 (patch)
tree945a622e0b51a2e7ff758269a60a6d5ef1417479
parent74589f738efd72e07f759a4aabd2e32613aaefb8 (diff)
downloadglibc-2d8e36e691f460aeeb3362fd44c71cafc7bb5852.tar.gz
glibc-2d8e36e691f460aeeb3362fd44c71cafc7bb5852.tar.xz
glibc-2d8e36e691f460aeeb3362fd44c71cafc7bb5852.zip
Fix BZ #18757.
-rw-r--r--ChangeLog7
-rw-r--r--NEWS5
-rw-r--r--libio/iofopncook.c1
-rw-r--r--libio/test-fmemopen.c21
4 files changed, 32 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index e4ca925d58..cbcccac6e0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2015-09-01  Paul Pluzhnikov  <ppluzhnikov@google.com>
 
+	[BZ #18757]
+	* libio/iofopncook.c (_IO_fopencookie): Set errno on failure.
+	* libio/test-fmemopen.c (do_bz18820): Extend the test to cover
+	BZ #18757.
+
+2015-09-01  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
 	* malloc/mtrace.pl: Filter out NULL entries.
 
 2015-09-01  Joseph Myers  <joseph@codesourcery.com>
diff --git a/NEWS b/NEWS
index e41919adf8..029d56314b 100644
--- a/NEWS
+++ b/NEWS
@@ -11,8 +11,9 @@ Version 2.23
 
   2898, 14341, 15786, 16141, 16517, 16519, 16520, 16734, 16973, 17787,
   17905, 18084, 18086, 18240, 18265, 18370, 18421, 18480, 18525, 18610,
-  18618, 18647, 18661, 18674, 18681, 18778, 18781, 18787, 18789, 18790,
-  18795, 18796, 18820, 18823, 18824, 18863, 18870, 18873, 18887.
+  18618, 18647, 18661, 18674, 18681, 18757, 18778, 18781, 18787, 18789,
+  18790, 18795, 18796, 18820, 18823, 18824, 18863, 18870, 18873, 18887.
+
 
 * The obsolete header <regexp.h> has been removed.  Programs that require
   this header must be updated to use <regex.h> instead.
diff --git a/libio/iofopncook.c b/libio/iofopncook.c
index b845d29657..978a7fa345 100644
--- a/libio/iofopncook.c
+++ b/libio/iofopncook.c
@@ -189,6 +189,7 @@ _IO_fopencookie (cookie, mode, io_functions)
       read_write = _IO_NO_READS|_IO_IS_APPENDING;
       break;
     default:
+      __set_errno (EINVAL);
       return NULL;
   }
   if (mode[0] == '+' || (mode[0] == 'b' && mode[1] == '+'))
diff --git a/libio/test-fmemopen.c b/libio/test-fmemopen.c
index e8e757f351..a62f6644c2 100644
--- a/libio/test-fmemopen.c
+++ b/libio/test-fmemopen.c
@@ -19,6 +19,7 @@
 
 static char buffer[] = "foobar";
 
+#include <errno.h>
 #include <stdio.h>
 #include <string.h>
 #include <errno.h>
@@ -30,6 +31,7 @@ do_bz18820 (void)
   char ch;
   FILE *stream;
 
+  errno = 0;
   stream = fmemopen (&ch, 1, "?");
   if (stream)
     {
@@ -37,6 +39,11 @@ do_bz18820 (void)
       fclose (stream);
       return 1;
     }
+  if (errno != EINVAL)
+    {
+      printf ("fmemopen: got %i, expected EINVAL (%i)\n", errno, EINVAL);
+      return 10;
+    }
 
   stream = fmemopen (NULL, 42, "?");
   if (stream)
@@ -46,6 +53,20 @@ do_bz18820 (void)
       return 2;
     }
 
+  errno = 0;
+  stream = fmemopen (NULL, ~0, "w");
+  if (stream)
+    {
+      printf ("fmemopen: expected NULL, got %p\n", stream);
+      fclose (stream);
+      return 3;
+    }
+  if (errno != ENOMEM)
+    {
+      printf ("fmemopen: got %i, expected ENOMEM (%i)\n", errno, ENOMEM);
+      return 20;
+    }
+
   return 0;
 }