Fix BZ #18757.
authorPaul Pluzhnikov <ppluzhnikov@google.com>
Tue, 1 Sep 2015 15:48:15 +0000 (08:48 -0700)
committerPaul Pluzhnikov <ppluzhnikov@google.com>
Tue, 1 Sep 2015 15:48:15 +0000 (08:48 -0700)
ChangeLog
NEWS
libio/iofopncook.c
libio/test-fmemopen.c

index e4ca925..cbcccac 100644 (file)
--- 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 e41919a..029d563 100644 (file)
--- 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.
index b845d29..978a7fa 100644 (file)
@@ -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] == '+'))
index e8e757f..a62f664 100644 (file)
@@ -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;
 }