Index: Lib/urllib.py =================================================================== --- Lib/urllib.py (revision 76700) +++ Lib/urllib.py (working copy) @@ -95,6 +95,8 @@ def urlcleanup(): if _urlopener: _urlopener.cleanup() + _safemaps.clear() + ftpcache.clear() # check for SSL try: Index: Lib/test/test_urllib.py =================================================================== --- Lib/test/test_urllib.py (revision 76700) +++ Lib/test/test_urllib.py (working copy) @@ -6,6 +6,7 @@ from test import test_support import os import mimetools +import random import tempfile import StringIO @@ -409,6 +410,13 @@ self.assertEqual(urllib.quote_plus('alpha+beta gamma', '+'), 'alpha+beta+gamma') + def test_quote_leak(self): + # bug 5596 - highlight the refleak in the internal _safemaps cache + safe = ''.join(chr(random.randrange(128)) for i in '123456') + text = 'abcdefghijklmnopqrstuvwxyz' + result = urllib.quote(text, safe=safe) + self.assertEqual(result, text) + class UnquotingTests(unittest.TestCase): """Tests for unquote() and unquote_plus()