summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/library/dbm.rst8
-rw-r--r--Doc/library/sys.rst12
-rw-r--r--Lib/ntpath.py13
-rw-r--r--Lib/test/test_ntpath.py3
-rw-r--r--Lib/test/test_optparse.py6
-rw-r--r--Lib/test/test_tcl.py2
-rw-r--r--Misc/NEWS7
-rw-r--r--Python/getversion.c2
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,))
diff --git a/Misc/NEWS b/Misc/NEWS
index 80e1ced..6752203 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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;
}