From 38bb9c6d147e25d372f69eca6b047c89a547a8e9 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Fri, 31 Mar 2006 20:00:15 +0000 Subject: [PATCH] bug #1461855: make os.fdopen() add the O_APPEND flag if using "a" mode. glibc, for example, does this already on its own, but it seems that the solaris libc doesn't. This leads to Python code being able to over- write file contents even though having specified "a" mode. (backport from rev. 43501) --- Modules/posixmodule.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index a65fb4b162ea..b4cab361ff78 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -5458,9 +5458,20 @@ posix_fdopen(PyObject *self, PyObject *args) "invalid file mode '%s'", mode); return NULL; } - Py_BEGIN_ALLOW_THREADS - fp = fdopen(fd, mode); + if (mode[0] == 'a') { + /* try to make sure the O_APPEND flag is set */ + int flags; + flags = fcntl(fd, F_GETFL); + if (flags != -1) + fcntl(fd, F_SETFL, flags | O_APPEND); + fp = fdopen(fd, mode); + if (fp == NULL) + /* restore old mode if fdopen failed */ + fcntl(fd, F_SETFL, flags); + } else { + fp = fdopen(fd, mode); + } Py_END_ALLOW_THREADS if (fp == NULL) return posix_error(); -- 2.47.3