From a99b761972c60b4c98e2c08233faa7b915e4104c Mon Sep 17 00:00:00 2001 From: Senthil Kumaran Date: Thu, 14 Apr 2011 12:54:35 +0800 Subject: [PATCH] Fix Issue11474 - url2pathname() handling of '/C|/' on Windows --- Lib/nturl2path.py | 7 +++++-- Lib/test/test_urllib.py | 18 ++++++++++++++++++ Misc/NEWS | 3 +++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/Lib/nturl2path.py b/Lib/nturl2path.py index 29ea80f9d9e..10ea2728078 100644 --- a/Lib/nturl2path.py +++ b/Lib/nturl2path.py @@ -25,11 +25,14 @@ def url2pathname(url): error = 'Bad URL: ' + url raise IOError, error drive = comp[0][-1].upper() - components = comp[1].split('/') path = drive + ':' - for comp in components: + components = comp[1].split('/') + for comp in components: if comp: path = path + '\\' + urllib.unquote(comp) + # Issue #11474: url like '/C|/' should convert into 'C:\\' + if path.endswith(':') and url.endswith('/'): + path += '\\' return path def pathname2url(p): diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py index 7bf383f6bc0..e7e54a2dd89 100644 --- a/Lib/test/test_urllib.py +++ b/Lib/test/test_urllib.py @@ -5,6 +5,7 @@ import httplib import unittest from test import test_support import os +import sys import mimetools import tempfile import StringIO @@ -630,6 +631,23 @@ class Pathname_Tests(unittest.TestCase): "url2pathname() failed; %s != %s" % (expect, result)) + @unittest.skipUnless(sys.platform == 'win32', + 'test specific to the nturl2path library') + def test_ntpath(self): + given = ('/C:/', '///C:/', '/C|//') + expect = 'C:\\' + for url in given: + result = urllib.url2pathname(url) + self.assertEqual(expect, result, + 'nturl2path.url2pathname() failed; %s != %s' % + (expect, result)) + given = '///C|/path' + expect = 'C:\\path' + result = urllib.url2pathname(given) + self.assertEqual(expect, result, + 'nturl2path.url2pathname() failed; %s != %s' % + (expect, result)) + class Utility_Tests(unittest.TestCase): """Testcase to test the various utility functions in the urllib.""" diff --git a/Misc/NEWS b/Misc/NEWS index 4718a69b1c3..20fa4179249 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -51,6 +51,9 @@ Core and Builtins Library ------- +- Issue #11474: Fix the bug with url2pathname() handling of '/C|/' on Windows. + Patch by Santoso Wijaya. + - Issue #9233: Fix json.loads('{}') to return a dict (instead of a list), when _json is not available.