This is the mail archive of the
glibc-bugs@sourceware.org
mailing list for the glibc project.
[Bug libc/12685] New: fopen doesn't last byte of valid modes
- From: "eblake at redhat dot com" <sourceware-bugzilla at sourceware dot org>
- To: glibc-bugs at sources dot redhat dot com
- Date: Wed, 20 Apr 2011 00:46:39 +0000
- Subject: [Bug libc/12685] New: fopen doesn't last byte of valid modes
- Auto-submitted: auto-generated
http://sourceware.org/bugzilla/show_bug.cgi?id=12685
Summary: fopen doesn't last byte of valid modes
Product: glibc
Version: 2.13
Status: NEW
Severity: normal
Priority: P2
Component: libc
AssignedTo: drepper.fsp@gmail.com
ReportedBy: eblake@redhat.com
$ cat foo.c
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
int main (void)
{
FILE *f = fopen ("/dev/null", "rb+cmxe");
if (!f) exit (1);
int fd = fileno (f);
if (fd < 0) exit (2);
int mode = fcntl (fd, F_GETFD);
if (mode < 0) exit (3);
return !(mode & FD_CLOEXEC);
}
$ ./foo; echo $?
1
Oops - an off-by-one error in fileops.c ended up ignoring 'e'. The same goes
for any other valid byte that doesn't appear until mode[6].
diff --git i/libio/fileops.c w/libio/fileops.c
index 4698953..ee6ce13 100644
--- i/libio/fileops.c
+++ w/libio/fileops.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1995, 1997-2005, 2006, 2007, 2008, 2009
+/* Copyright (C) 1993, 1995, 1997-2005, 2006, 2007, 2008, 2009, 2011
Free Software Foundation, Inc.
This file is part of the GNU C Library.
Written by Per Bothner <bothner@cygnus.com>.
@@ -290,7 +290,7 @@ _IO_new_file_fopen (fp, filename, mode, is32not64)
#ifdef _LIBC
last_recognized = mode;
#endif
- for (i = 1; i < 6; ++i)
+ for (i = 1; i < 7; ++i)
{
switch (*++mode)
{
--
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.