diff options
-rw-r--r-- | Doc/library/dbm.rst | 8 | ||||
-rw-r--r-- | Doc/library/sys.rst | 12 | ||||
-rw-r--r-- | Lib/ntpath.py | 13 | ||||
-rw-r--r-- | Lib/test/test_ntpath.py | 3 | ||||
-rw-r--r-- | Lib/test/test_optparse.py | 6 | ||||
-rw-r--r-- | Lib/test/test_tcl.py | 2 | ||||
-rw-r--r-- | Misc/NEWS | 7 | ||||
-rw-r--r-- | Python/getversion.c | 2 |
8 files changed, 33 insertions, 20 deletions
diff --git a/Doc/library/dbm.rst b/Doc/library/dbm.rst index bcb2378..b4fad45 100644 --- a/Doc/library/dbm.rst +++ b/Doc/library/dbm.rst @@ -5,10 +5,10 @@ :synopsis: Interfaces to various Unix "database" formats. :mod:`dbm` is a generic interface to variants of the DBM database --- - :mod:`dbm.gnu` or :mod:`dbm.ndbm`. If none of these modules is installed, the - slow-but-simple implementation in module :mod:`dbm.dumb` will be used. There - is a `third party interface <http://www.jcea.es/programacion/pybsddb.htm>`_ to - the Oracle Berkely DB. +:mod:`dbm.gnu` or :mod:`dbm.ndbm`. If none of these modules is installed, the +slow-but-simple implementation in module :mod:`dbm.dumb` will be used. There +is a `third party interface <http://www.jcea.es/programacion/pybsddb.htm>`_ to +the Oracle Berkeley DB. .. exception:: error diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index 67f335b..4586793 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -853,14 +853,10 @@ always available. .. data:: version A string containing the version number of the Python interpreter plus additional - information on the build number and compiler used. It has a value of the form - ``'version (#build_number, build_date, build_time) [compiler]'``. The first - three characters are used to identify the version in the installation - directories (where appropriate on each platform). An example:: - - >>> import sys - >>> sys.version - '1.5.2 (#0 Apr 13 1999, 10:51:12) [MSC 32 bit (Intel)]' + information on the build number and compiler used. This string is displayed + when the interactive interpreter is started. Do not extract version information + out of it, rather, use :data:`version_info` and the functions provided by the + :mod:`platform` module. .. data:: api_version diff --git a/Lib/ntpath.py b/Lib/ntpath.py index 1cec895..6aa1e85 100644 --- a/Lib/ntpath.py +++ b/Lib/ntpath.py @@ -70,6 +70,12 @@ def _get_colon(path): else: return ':' +def _get_special(path): + if isinstance(path, bytes): + return (b'\\\\.\\', b'\\\\?\\') + else: + return ('\\\\.\\', '\\\\?\\') + # Normalize the case of a pathname and map slashes to backslashes. # Other normalizations (such as optimizing '../' away) are not done # (this is done by normpath). @@ -508,6 +514,13 @@ def normpath(path): """Normalize path, eliminating double slashes, etc.""" sep = _get_sep(path) dotdot = _get_dot(path) * 2 + special_prefixes = _get_special(path) + if path.startswith(special_prefixes): + # in the case of paths with these prefixes: + # \\.\ -> device names + # \\?\ -> literal paths + # do not do any normalization, but return the path unchanged + return path path = path.replace(_get_altsep(path), sep) prefix, path = splitdrive(path) diff --git a/Lib/test/test_ntpath.py b/Lib/test/test_ntpath.py index 4a7a48b..8ff7075 100644 --- a/Lib/test/test_ntpath.py +++ b/Lib/test/test_ntpath.py @@ -174,6 +174,9 @@ class TestNtpath(unittest.TestCase): tester("ntpath.normpath('C:////a/b')", r'C:\a\b') tester("ntpath.normpath('//machine/share//a/b')", r'\\machine\share\a\b') + tester("ntpath.normpath('\\\\.\\NUL')", r'\\.\NUL') + tester("ntpath.normpath('\\\\?\\D:/XY\\Z')", r'\\?\D:/XY\Z') + def test_expandvars(self): with support.EnvironmentVarGuard() as env: env.clear() diff --git a/Lib/test/test_optparse.py b/Lib/test/test_optparse.py index 79467b0..b68e31d 100644 --- a/Lib/test/test_optparse.py +++ b/Lib/test/test_optparse.py @@ -783,15 +783,13 @@ class TestBool(BaseTest): (options, args) = self.assertParseOK(["-q"], {'verbose': 0}, []) - if hasattr(__builtins__, 'False'): - self.assertTrue(options.verbose is False) + self.assertTrue(options.verbose is False) def test_bool_true(self): (options, args) = self.assertParseOK(["-v"], {'verbose': 1}, []) - if hasattr(__builtins__, 'True'): - self.assertTrue(options.verbose is True) + self.assertTrue(options.verbose is True) def test_bool_flicker_on_and_off(self): self.assertParseOK(["-qvq", "-q", "-v"], diff --git a/Lib/test/test_tcl.py b/Lib/test/test_tcl.py index a269db8..542986c 100644 --- a/Lib/test/test_tcl.py +++ b/Lib/test/test_tcl.py @@ -143,7 +143,7 @@ class TclTest(unittest.TestCase): fullname[0], fullname[3:]) - with test_support.EnvironmentVarGuard() as env: + with support.EnvironmentVarGuard() as env: env.unset("TCL_LIBRARY") f = os.popen('%s -c "import Tkinter; print Tkinter"' % (unc_name,)) @@ -84,6 +84,9 @@ C-API Library ------- +- Issue #7909: Do not touch paths with the special prefixes ``\\.\`` + or ``\\?\`` in ntpath.normpath(). + - Issue #5146: Handle UID THREAD command correctly in imaplib. - Issue #5147: Fix the header generated for cookie files written by @@ -1551,8 +1554,8 @@ Extension Modules an error. The _PY_STRUCT_FLOAT_COERCE constant has been removed. The version number has been bumped to 0.3. -- Issue #5359: Readd the Berkley-DB detection code to allow _dbm be built - using Berkley-DB. +- Issue #5359: Readd the Berkeley DB detection code to allow _dbm be built + using Berkeley DB. Tests ----- diff --git a/Python/getversion.c b/Python/getversion.c index 7af16fc..7bd6efd 100644 --- a/Python/getversion.c +++ b/Python/getversion.c @@ -9,7 +9,7 @@ const char * Py_GetVersion(void) { static char version[250]; - PyOS_snprintf(version, sizeof(version), "%.80s (%.80s) %.80s", + PyOS_snprintf(version, sizeof(version), "%.80s (%.80s) %.80s", PY_VERSION, Py_GetBuildInfo(), Py_GetCompiler()); return version; } |