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

This commit is contained in:
Timo Furrer 2019-01-17 15:15:53 +01:00 committed by Berker Peksag
parent f1d8e7cf17
commit 17f05bbc78
3 changed files with 22 additions and 4 deletions

View File

@ -6,6 +6,8 @@ Nick Mathewson
import unittest
from test import support
import os
import stat
import sys
import uu
import io
@ -218,6 +220,23 @@ class UUFileTest(unittest.TestCase):
with open(self.tmpin, 'rb') as 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__":
unittest.main()

View File

@ -133,10 +133,7 @@ def decode(in_file, out_file=None, mode=None, quiet=False):
out_file = sys.stdout.buffer
elif isinstance(out_file, str):
fp = open(out_file, 'wb')
try:
os.path.chmod(out_file, mode)
except AttributeError:
pass
os.chmod(out_file, mode)
out_file = fp
opened_files.append(out_file)
#

View File

@ -0,0 +1,2 @@
Fix the call to ``os.chmod()`` for ``uu.decode()`` if a mode is given or
decoded. Patch by Timo Furrer.