summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2008-03-06 06:55:22 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2008-03-06 06:55:22 (GMT)
commitd2bbe526c37e0f3810c4acb3cc3a5d0fcbcbeae7 (patch)
tree0f545b0fec977fc0b4513d55e41751aee9eed3ed
parent1df03405fc30604e00d506ac0f8c112517d8526e (diff)
downloadcpython-d2bbe526c37e0f3810c4acb3cc3a5d0fcbcbeae7.zip
cpython-d2bbe526c37e0f3810c4acb3cc3a5d0fcbcbeae7.tar.gz
cpython-d2bbe526c37e0f3810c4acb3cc3a5d0fcbcbeae7.tar.bz2
Patch #2232: os.tmpfile might fail on Windows if the user has no
permission to create files in the root directory. Will backport to 2.5.
-rw-r--r--Lib/test/test_os.py38
-rw-r--r--Misc/NEWS6
2 files changed, 44 insertions, 0 deletions
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index a6fe40e..ddda156 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -65,6 +65,44 @@ class TemporaryFileTests(unittest.TestCase):
def test_tmpfile(self):
if not hasattr(os, "tmpfile"):
return
+ # As with test_tmpnam() below, the Windows implementation of tmpfile()
+ # attempts to create a file in the root directory of the current drive.
+ # On Vista and Server 2008, this test will always fail for normal users
+ # as writing to the root directory requires elevated privileges. With
+ # XP and below, the semantics of tmpfile() are the same, but the user
+ # running the test is more likely to have administrative privileges on
+ # their account already. If that's the case, then os.tmpfile() should
+ # work. In order to make this test as useful as possible, rather than
+ # trying to detect Windows versions or whether or not the user has the
+ # right permissions, just try and create a file in the root directory
+ # and see if it raises a 'Permission denied' OSError. If it does, then
+ # test that a subsequent call to os.tmpfile() raises the same error. If
+ # it doesn't, assume we're on XP or below and the user running the test
+ # has administrative privileges, and proceed with the test as normal.
+ if sys.platform == 'win32':
+ name = '\\python_test_os_test_tmpfile.txt'
+ if os.path.exists(name):
+ os.remove(name)
+ try:
+ fp = open(name, 'w')
+ except IOError, first:
+ # open() failed, assert tmpfile() fails in the same way.
+ # Although open() raises an IOError and os.tmpfile() raises an
+ # OSError(), 'args' will be (13, 'Permission denied') in both
+ # cases.
+ try:
+ fp = os.tmpfile()
+ except OSError, second:
+ self.assertEqual(first.args, second.args)
+ else:
+ self.fail("expected os.tmpfile() to raise OSError")
+ return
+ else:
+ # open() worked, therefore, tmpfile() should work. Close our
+ # dummy file and proceed with the test as normal.
+ fp.close()
+ os.remove(name)
+
fp = os.tmpfile()
fp.write("foobar")
fp.seek(0,0)
diff --git a/Misc/NEWS b/Misc/NEWS
index ff97473..7019f4a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -28,6 +28,12 @@ Library
On all linux systems the --with-system-ffi configure option defaults
to "yes".
+Tests
+-----
+
+- Patch #2232: os.tmpfile might fail on Windows if the user has no
+ permission to create files in the root directory.
+
What's New in Python 2.6 alpha 1?
=================================