diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2014-01-18 13:35:37 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2014-01-18 13:35:37 (GMT) |
commit | 53ad0cd2842b7327bde4ca04ee11c544e522ff43 (patch) | |
tree | 97d5acc0e56305606306bbb0eed10a155d6c9aac /Lib/tarfile.py | |
parent | af69fe2311c184a64e1dbfae75646d5d6c268d32 (diff) | |
download | cpython-53ad0cd2842b7327bde4ca04ee11c544e522ff43.zip cpython-53ad0cd2842b7327bde4ca04ee11c544e522ff43.tar.gz cpython-53ad0cd2842b7327bde4ca04ee11c544e522ff43.tar.bz2 |
Issue #20245: The open functions in the tarfile module now correctly handle empty mode.
Diffstat (limited to 'Lib/tarfile.py')
-rwxr-xr-x | Lib/tarfile.py | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/Lib/tarfile.py b/Lib/tarfile.py index 16d338c..987c011 100755 --- a/Lib/tarfile.py +++ b/Lib/tarfile.py @@ -1429,10 +1429,11 @@ class TarFile(object): can be determined, `mode' is overridden by `fileobj's mode. `fileobj' is not closed, when TarFile is closed. """ - if len(mode) > 1 or mode not in "raw": + modes = {"r": "rb", "a": "r+b", "w": "wb"} + if mode not in modes: raise ValueError("mode must be 'r', 'a' or 'w'") self.mode = mode - self._mode = {"r": "rb", "a": "r+b", "w": "wb"}[mode] + self._mode = modes[mode] if not fileobj: if self.mode == "a" and not os.path.exists(name): @@ -1588,7 +1589,7 @@ class TarFile(object): filemode = filemode or "r" comptype = comptype or "tar" - if filemode not in "rw": + if filemode not in ("r", "w"): raise ValueError("mode must be 'r' or 'w'") stream = _Stream(name, filemode, comptype, fileobj, bufsize) @@ -1600,7 +1601,7 @@ class TarFile(object): t._extfileobj = False return t - elif mode in "aw": + elif mode in ("a", "w"): return cls.taropen(name, mode, fileobj, **kwargs) raise ValueError("undiscernible mode") @@ -1609,7 +1610,7 @@ class TarFile(object): def taropen(cls, name, mode="r", fileobj=None, **kwargs): """Open uncompressed tar archive name for reading or writing. """ - if len(mode) > 1 or mode not in "raw": + if mode not in ("r", "a", "w"): raise ValueError("mode must be 'r', 'a' or 'w'") return cls(name, mode, fileobj, **kwargs) @@ -1618,7 +1619,7 @@ class TarFile(object): """Open gzip compressed tar archive name for reading or writing. Appending is not allowed. """ - if len(mode) > 1 or mode not in "rw": + if mode not in ("r", "w"): raise ValueError("mode must be 'r' or 'w'") try: @@ -1649,7 +1650,7 @@ class TarFile(object): """Open bzip2 compressed tar archive name for reading or writing. Appending is not allowed. """ - if len(mode) > 1 or mode not in "rw": + if mode not in ("r", "w"): raise ValueError("mode must be 'r' or 'w'.") try: |