Commit 17f05bbc authored by Timo Furrer's avatar Timo Furrer Committed by Berker Peksag

bpo-33687: Fix call to os.chmod() in uu.decode() (GH-7282)

parent f1d8e7cf
...@@ -6,6 +6,8 @@ Nick Mathewson ...@@ -6,6 +6,8 @@ Nick Mathewson
import unittest import unittest
from test import support from test import support
import os
import stat
import sys import sys
import uu import uu
import io import io
...@@ -218,6 +220,23 @@ class UUFileTest(unittest.TestCase): ...@@ -218,6 +220,23 @@ class UUFileTest(unittest.TestCase):
with open(self.tmpin, 'rb') as f: with open(self.tmpin, 'rb') as f:
self.assertRaises(uu.Error, uu.decode, f) self.assertRaises(uu.Error, uu.decode, f)
def test_decode_mode(self):
# Verify that decode() will set the given mode for the out_file
expected_mode = 0o444
with open(self.tmpin, 'wb') as f:
f.write(encodedtextwrapped(expected_mode, self.tmpout))
# make file writable again, so it can be removed (Windows only)
self.addCleanup(os.chmod, self.tmpout, expected_mode | stat.S_IWRITE)
with open(self.tmpin, 'rb') as f:
uu.decode(f)
self.assertEqual(
stat.S_IMODE(os.stat(self.tmpout).st_mode),
expected_mode
)
if __name__=="__main__": if __name__=="__main__":
unittest.main() unittest.main()
...@@ -133,10 +133,7 @@ def decode(in_file, out_file=None, mode=None, quiet=False): ...@@ -133,10 +133,7 @@ def decode(in_file, out_file=None, mode=None, quiet=False):
out_file = sys.stdout.buffer out_file = sys.stdout.buffer
elif isinstance(out_file, str): elif isinstance(out_file, str):
fp = open(out_file, 'wb') fp = open(out_file, 'wb')
try: os.chmod(out_file, mode)
os.path.chmod(out_file, mode)
except AttributeError:
pass
out_file = fp out_file = fp
opened_files.append(out_file) opened_files.append(out_file)
# #
......
Fix the call to ``os.chmod()`` for ``uu.decode()`` if a mode is given or
decoded. Patch by Timo Furrer.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment