about summary refs log tree commit diff
path: root/src/temp
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2014-10-06 23:13:01 -0400
committerRich Felker <dalias@aerifal.cx>2014-10-06 23:13:01 -0400
commit6f1c1fe90c5b23ddf1ee8cce0ee7d77d392301a7 (patch)
treeb0de899c606acc71d6615a24f1b1c742f244ab42 /src/temp
parentdccbf4c809efc311aa37da71de70d04dfd8b0db3 (diff)
downloadmusl-6f1c1fe90c5b23ddf1ee8cce0ee7d77d392301a7.tar.gz
musl-6f1c1fe90c5b23ddf1ee8cce0ee7d77d392301a7.tar.xz
musl-6f1c1fe90c5b23ddf1ee8cce0ee7d77d392301a7.zip
ignore access mode bits of flags in mkostemps and functions that use it
per the text accepted for inclusion in POSIX, behavior is unspecified
when any of the access mode bits are set. since it's impossible to
consistently report this usage error (O_RDONLY could not be detected
since its value happens to be zero), the most consistent way to handle
them is just to ignore them.

previously, if a caller erroneously passed O_WRONLY, the resulting
access mode would be O_WRONLY|O_RDWR, which has the value 3, and this
resulted in a file descriptor which rejects both read and write
attempts when it is subsequently used.
Diffstat (limited to 'src/temp')
-rw-r--r--src/temp/mkostemps.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/temp/mkostemps.c b/src/temp/mkostemps.c
index 7f8492a1..512b5f18 100644
--- a/src/temp/mkostemps.c
+++ b/src/temp/mkostemps.c
@@ -15,6 +15,7 @@ int __mkostemps(char *template, int len, int flags)
 		return -1;
 	}
 
+	flags -= flags & O_ACCMODE;
 	int fd, retries = 100;
 	do {
 		__randname(template+l-len-6);