Index: Lib/urllib/parse.py =================================================================== --- Lib/urllib/parse.py (revision 70667) +++ Lib/urllib/parse.py (working copy) @@ -645,7 +645,7 @@ global _passwdprog if _passwdprog is None: import re - _passwdprog = re.compile('^([^:]*):(.*)$') + _passwdprog = re.compile('^([^:]*):(.*)$',re.S) match = _passwdprog.match(user) if match: return match.group(1, 2) Index: Lib/test/test_urllib.py =================================================================== --- Lib/test/test_urllib.py (revision 70667) +++ Lib/test/test_urllib.py (working copy) @@ -830,6 +830,21 @@ "url2pathname() failed; %s != %s" % (expect, result)) +class Utility_Tests(unittest.TestCase): + """Testcase to test the various utility functions in the urllib.""" + + def test_splitpasswd(self): + """Some of password examples are not sensible, but it is added to + confirming to RFC2617 and addressing issue4675. + """ + self.assertEqual(('user', 'ab'),urllib.parse.splitpasswd('user:ab')) + self.assertEqual(('user', 'a\nb'),urllib.parse.splitpasswd('user:a\nb')) + self.assertEqual(('user', 'a\tb'),urllib.parse.splitpasswd('user:a\tb')) + self.assertEqual(('user', 'a\rb'),urllib.parse.splitpasswd('user:a\rb')) + self.assertEqual(('user', 'a\fb'),urllib.parse.splitpasswd('user:a\fb')) + self.assertEqual(('user', 'a\vb'),urllib.parse.splitpasswd('user:a\vb')) + self.assertEqual(('user', 'a:b'),urllib.parse.splitpasswd('user:a:b')) + # Just commented them out. # Can't really tell why keep failing in windows and sparc. # Everywhere else they work ok, but on those machines, someteimes @@ -920,6 +935,7 @@ UnquotingTests, urlencode_Tests, Pathname_Tests, + Utility_Tests, #FTPWrapperTests, )