From 9b513bf6ca704f465ec4030dc572bc5d627bafac Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Mon, 28 Oct 2013 08:06:50 +0100 Subject: Add news entry for 3.3.3 final. --- Misc/NEWS | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS index fe56252..9872b30 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -2,11 +2,20 @@ Python News +++++++++++ +What's New in Python 3.3.3? +=========================== + +*Release date: XX-Nov-2013* + +Tests +----- + +- Issue #18964: Fix test_tcl when run with Tcl/Tk versions < 8.5. + + What's New in Python 3.3.3 release candidate 1? =============================================== -.. *Not yet released, see sections below for changes released in 3.3.2* - *Release date: 27-Oct-2013* Core and Builtins -- cgit v0.12 From 85b8be1ac88de7b2bbe06c47e45b9c0087e8037d Mon Sep 17 00:00:00 2001 From: Ned Deily Date: Tue, 5 Nov 2013 02:44:17 -0800 Subject: Issue #15663: Revert OS X installer built-in Tcl/Tk support for 3.3.3. Some third-party projects, such as matplotlib and PIL/Pillow, depended on being able to build with Tcl and Tk frameworks in /Library/Frameworks. They were unable to build with the built-in Tcl/Tk and/or execute correctly. --- Mac/BuildScript/README.txt | 29 +---------------------------- Mac/BuildScript/build-installer.py | 10 +++++----- Mac/BuildScript/resources/ReadMe.txt | 23 +++++++---------------- Mac/BuildScript/resources/Welcome.rtf | 10 +++++++--- Misc/NEWS | 8 ++++++++ 5 files changed, 28 insertions(+), 52 deletions(-) diff --git a/Mac/BuildScript/README.txt b/Mac/BuildScript/README.txt index 38470c5..56c769a 100644 --- a/Mac/BuildScript/README.txt +++ b/Mac/BuildScript/README.txt @@ -57,40 +57,13 @@ for each release. * NCurses 5.9 (http://bugs.python.org/issue15037) * SQLite 3.7.13 - * Tcl 8.5.15 - * Tk 8.5.15 * XZ 5.0.3 - uses system-supplied versions of third-party libraries * readline module links with Apple BSD editline (libedit) - - requires ActiveState Tcl/Tk 8.5.14 (or later) to be installed for building - - * Beginning with Python 3.3.3, this installer now includes its own - builtin copy of Tcl and Tk 8.5.15 libraries and thus is no longer - dependent on the buggy releases of Aqua Cocoa Tk 8.5 shipped with - OS X 10.6 or on installing a newer third-party version of Tcl/Tk - in /Library/Frameworks, such as from ActiveState. If it is - necessary to fallback to using a third-party Tcl/Tk because of - a problem with the builtin Tcl/Tk, there is a backup version of - the _tkinter extension included which will dynamically link to - Tcl and Tk frameworks in /Library/Frameworks as in previous releases. - To enable (for all users of this Python 3.3):: - - sudo bash - cd /Library/Frameworks/Python.framework/Versions/3.3 - cd ./lib/python3.3 - cp -p ./lib-tkinter/library/_tkinter.so ./lib-dynload - exit - - To restore using Python's builtin versions of Tcl and Tk:: - - sudo bash - cd /Library/Frameworks/Python.framework/Versions/3.3 - cd ./lib/python3.3 - cp -p ./lib-tkinter/builtin/_tkinter.so ./lib-dynload - exit + - requires ActiveState Tcl/Tk 8.5.9 (or later) to be installed for building - recommended build environment: diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py index 0859b3a..fd5d5c3 100755 --- a/Mac/BuildScript/build-installer.py +++ b/Mac/BuildScript/build-installer.py @@ -193,7 +193,7 @@ def library_recipes(): LT_10_5 = bool(DEPTARGET < '10.5') - if DEPTARGET > '10.5': + if (DEPTARGET > '10.5') and (getVersionTuple() >= (3, 4)): result.extend([ dict( name="Tcl 8.5.15", @@ -571,7 +571,7 @@ def checkEnvironment(): # - the traditional version (renamed to _tkinter_library.so) linked # with /Library/Frameworks/{Tcl,Tk}.framework # - the default version linked with our builtin copies of Tcl and Tk - if DEPTARGET > '10.5': + if (DEPTARGET > '10.5') and (getVersionTuple() >= (3, 4)): EXPECTED_SHARED_LIBS['_tkinter_library.so'] = \ EXPECTED_SHARED_LIBS['_tkinter.so'] EXPECTED_SHARED_LIBS['_tkinter.so'] = [ @@ -971,7 +971,7 @@ def buildPython(): # out-of-date and has critical bugs. Save the _tkinter.so that was # linked with /Library/Frameworks/{Tck,Tk}.framework and build # another _tkinter.so linked with our builtin Tcl and Tk libs. - if DEPTARGET > '10.5': + if (DEPTARGET > '10.5') and (getVersionTuple() >= (3, 4)): runCommand("find build -name '_tkinter.so' " " -execdir mv '{}' _tkinter_library.so \;") print("Running make to build builtin _tkinter") @@ -1012,7 +1012,7 @@ def buildPython(): # users to select which to import by manipulating sys.path # directly or with PYTHONPATH. - if DEPTARGET > '10.5': + if (DEPTARGET > '10.5') and (getVersionTuple() >= (3, 4)): TKINTERS = ['builtin', 'library'] tkinter_moves = [('_tkinter_' + tkn + '.so', os.path.join(path_to_lib, 'lib-tkinter', tkn)) @@ -1059,7 +1059,7 @@ def buildPython(): # The files are moved after the entire tree has been walked # since the shared library checking depends on the files # having unique names. - if DEPTARGET > '10.5': + if (DEPTARGET > '10.5') and (getVersionTuple() >= (3, 4)): for tkm in tkinter_moves: if fn == tkm[0]: moves_list.append( diff --git a/Mac/BuildScript/resources/ReadMe.txt b/Mac/BuildScript/resources/ReadMe.txt index e5c49f0..212d963 100644 --- a/Mac/BuildScript/resources/ReadMe.txt +++ b/Mac/BuildScript/resources/ReadMe.txt @@ -17,27 +17,18 @@ instead of double-clicking, control-click or right click the "Python" installer package icon. Then select "Open using ... Installer" from the contextual menu that appears. - **** IMPORTANT changes if you use IDLE and Tkinter **** - -Installing a third-party version of Tcl/Tk is no longer required -================================================================ + **** IMPORTANT **** -As of Python 3.3.3, the 10.6+ 64-bit installer now -comes with its own private copy of Tcl and Tk 8.5 libraries. For -this version of Python, it is no longer necessary to install -a third-party version of Tcl/Tk 8.5, such as those from ActiveState, -to work around the problematic versions of Tcl/Tk 8.5 shipped by -Apple in OS X 10.6 and later. (This does not change the requirements -for older versions of Python installed from python.org.) By default, -this version of Python will always use its own private version, -regardless of whether a third-party Tcl/Tk is installed. -The 10.5+ 32-bit-only installer continues to use Tcl/Tk 8.4, -either a third-party or system-supplied version. +Update your version of Tcl/Tk to use IDLE or other Tk applications +================================================================== -Visit http://www.python.org/download/mac/tcltk/ +To use IDLE or other programs that use the Tkinter graphical user +interface toolkit, you may need to install a newer third-party version +of the Tcl/Tk frameworks. Visit http://www.python.org/download/mac/tcltk/ for current information about supported and recommended versions of Tcl/Tk for this version of Python and of Mac OS X. + Using this version of Python on OS X ==================================== diff --git a/Mac/BuildScript/resources/Welcome.rtf b/Mac/BuildScript/resources/Welcome.rtf index c3b4b7c..239d76e 100644 --- a/Mac/BuildScript/resources/Welcome.rtf +++ b/Mac/BuildScript/resources/Welcome.rtf @@ -25,7 +25,11 @@ See the ReadMe file and the Python documentation for more information.\ \b0 at any time to make $FULL_VERSION the default Python 3 version. This version can co-exist with other installed versions of Python 3 and Python 2.\ \ -\b IMPORTANT for users of IDLE and tkinter: -\b0 As of Python 3.3.3, it is no longer necessary to install third-party versions of the +\b IMPORTANT: +\b0 +\b IDLE +\b0 and other programs using the +\b tkinter +\b0 graphical user interface toolkit require specific versions of the \b Tcl/Tk -\b0 platform independent windowing toolkit. Please read the ReadMe file and visit {\field{\*\fldinst{HYPERLINK "http://www.python.org/download/mac/tcltk/"}}{\fldrslt http://www.python.org/download/mac/tcltk/}} for more information on supported and recommended versions of Tcl/Tk for this version of Python and Mac OS X.} \ No newline at end of file +\b0 platform independent windowing toolkit. Visit {\field{\*\fldinst{HYPERLINK "http://www.python.org/download/mac/tcltk/"}}{\fldrslt http://www.python.org/download/mac/tcltk/}} for current information on supported and recommended versions of Tcl/Tk for this version of Python and Mac OS X.} \ No newline at end of file diff --git a/Misc/NEWS b/Misc/NEWS index 9872b30..9ff03c2 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,14 @@ Tests - Issue #18964: Fix test_tcl when run with Tcl/Tk versions < 8.5. +Build +----- + +- Issue #15663: Revert OS X installer built-in Tcl/Tk support for 3.3.3. + Some third-party projects, such as Matplotlib and PIL/Pillow, + depended on being able to build with Tcl and Tk frameworks in + /Library/Frameworks. + What's New in Python 3.3.3 release candidate 1? =============================================== -- cgit v0.12 From b3acaccf273feb720df10c2890d6c35ca8b62acd Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Mon, 11 Nov 2013 06:10:23 +0100 Subject: Transplant of rev 544b654d000c: directory traversal attack in CGIHttpRequestHandler. --- Lib/http/server.py | 9 ++++----- Lib/test/test_httpservers.py | 12 ++++++++++++ Misc/NEWS | 5 +++++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Lib/http/server.py b/Lib/http/server.py index ebc2a8f..2bfda12 100644 --- a/Lib/http/server.py +++ b/Lib/http/server.py @@ -987,18 +987,17 @@ class CGIHTTPRequestHandler(SimpleHTTPRequestHandler): def run_cgi(self): """Execute a CGI script.""" - path = self.path dir, rest = self.cgi_info - i = path.find('/', len(dir) + 1) + i = rest.find('/') while i >= 0: - nextdir = path[:i] - nextrest = path[i+1:] + nextdir = rest[:i] + nextrest = rest[i+1:] scriptdir = self.translate_path(nextdir) if os.path.isdir(scriptdir): dir, rest = nextdir, nextrest - i = path.find('/', len(dir) + 1) + i = rest.find('/') else: break diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index b8bbcb6..9dd2778 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -325,6 +325,7 @@ class CGIHTTPServerTestCase(BaseTestCase): self.parent_dir = tempfile.mkdtemp() self.cgi_dir = os.path.join(self.parent_dir, 'cgi-bin') os.mkdir(self.cgi_dir) + self.nocgi_path = None self.file1_path = None self.file2_path = None @@ -345,6 +346,11 @@ class CGIHTTPServerTestCase(BaseTestCase): self.tearDown() self.skipTest("Python executable path is not encodable to utf-8") + self.nocgi_path = os.path.join(self.parent_dir, 'nocgi.py') + with open(self.nocgi_path, 'w') as fp: + fp.write(cgi_file1 % self.pythonexe) + os.chmod(self.nocgi_path, 0o777) + self.file1_path = os.path.join(self.cgi_dir, 'file1.py') with open(self.file1_path, 'w', encoding='utf-8') as file1: file1.write(cgi_file1 % self.pythonexe) @@ -362,6 +368,8 @@ class CGIHTTPServerTestCase(BaseTestCase): os.chdir(self.cwd) if self.pythonexe != sys.executable: os.remove(self.pythonexe) + if self.nocgi_path: + os.remove(self.nocgi_path) if self.file1_path: os.remove(self.file1_path) if self.file2_path: @@ -418,6 +426,10 @@ class CGIHTTPServerTestCase(BaseTestCase): self.assertEqual((b'Hello World' + self.linesep, 'text/html', 200), (res.read(), res.getheader('Content-type'), res.status)) + def test_issue19435(self): + res = self.request('///////////nocgi.py/../cgi-bin/nothere.sh') + self.assertEqual(res.status, 404) + def test_post(self): params = urllib.parse.urlencode( {'spam' : 1, 'eggs' : 'python', 'bacon' : 123456}) diff --git a/Misc/NEWS b/Misc/NEWS index 9ff03c2..dfb6068 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -7,6 +7,11 @@ What's New in Python 3.3.3? *Release date: XX-Nov-2013* +Library +------- + +- Issue #19435: Fix directory traversal attack on CGIHttpRequestHandler. + Tests ----- -- cgit v0.12 From 7e246179047d33bd467bcab673b3ecc1944f91a4 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Tue, 29 Oct 2013 20:50:01 +0100 Subject: Issue #19227 / Issue #18747: Remove pthread_atfork() handler to remove OpenSSL re-seeding It is causing trouble like e.g. hanging processes. --- Modules/_ssl.c | 67 ---------------------------------------------------------- 1 file changed, 67 deletions(-) diff --git a/Modules/_ssl.c b/Modules/_ssl.c index b791f28d..374d930 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -19,9 +19,6 @@ #ifdef WITH_THREAD #include "pythread.h" -#ifdef HAVE_PTHREAD_ATFORK -# include -#endif #define PySSL_BEGIN_ALLOW_THREADS_S(save) \ do { if (_ssl_locks_count>0) { (save) = PyEval_SaveThread(); } } while (0) @@ -2584,65 +2581,6 @@ Queries the entropy gather daemon (EGD) on the socket named by 'path'.\n\ Returns number of bytes read. Raises SSLError if connection to EGD\n\ fails or if it does not provide enough data to seed PRNG."); -/* Seed OpenSSL's PRNG at fork(), http://bugs.python.org/issue18747 - * - * The prepare handler seeds the PRNG from pseudo-random data like pid, the - * current time (miliseconds or seconds) and an uninitialized array. - * The array contains stack variables that are impossible to predict - * on most systems, e.g. function return address (subject to ASLR), the - * stack protection canary and automatic variables. - * The code is inspired by Apache's ssl_rand_seed() function. - * - * Note: - * The code uses pthread_atfork() until Python has a proper atfork API. The - * handlers are not removed from the child process. A prepare handler is used - * instead of a child handler because fork() is supposed to be async-signal - * safe but the handler calls unsafe functions. A parent handler has caused - * other problems, see issue #19227. - */ - -#if defined(HAVE_PTHREAD_ATFORK) && defined(WITH_THREAD) -#define PYSSL_RAND_ATFORK 1 - -static void -PySSL_RAND_atfork_prepare(void) -{ - struct { - char stack[128]; /* uninitialized (!) stack data, 128 is an - arbitrary number. */ - pid_t pid; /* current pid */ - _PyTime_timeval tp; /* current time */ - } seed; - -#ifdef WITH_VALGRIND - VALGRIND_MAKE_MEM_DEFINED(seed.stack, sizeof(seed.stack)); -#endif - seed.pid = getpid(); - _PyTime_gettimeofday(&(seed.tp)); - RAND_add((unsigned char *)&seed, sizeof(seed), 0.0); -} - -static int -PySSL_RAND_atfork(void) -{ - static int registered = 0; - int retval; - - if (registered) - return 0; - - retval = pthread_atfork(PySSL_RAND_atfork_prepare, /* prepare */ - NULL, /* parent */ - NULL); /* child */ - if (retval != 0) { - PyErr_SetFromErrno(PyExc_OSError); - return -1; - } - registered = 1; - return 0; -} -#endif /* HAVE_PTHREAD_ATFORK */ - #endif /* HAVE_OPENSSL_RAND */ @@ -3022,10 +2960,5 @@ PyInit__ssl(void) if (r == NULL || PyModule_AddObject(m, "_OPENSSL_API_VERSION", r)) return NULL; -#ifdef PYSSL_RAND_ATFORK - if (PySSL_RAND_atfork() == -1) - return NULL; -#endif - return m; } -- cgit v0.12 From 4cf9b2047d0438b69f66b0c2fd48e6d7576eb1f1 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Mon, 11 Nov 2013 06:13:54 +0100 Subject: Bump to 3.3.3rc2. --- Include/patchlevel.h | 4 ++-- Lib/distutils/__init__.py | 2 +- Lib/idlelib/idlever.py | 2 +- Misc/NEWS | 9 ++++++--- Misc/RPM/python-3.3.spec | 2 +- README | 2 +- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/Include/patchlevel.h b/Include/patchlevel.h index 658f0f5..3ae5dc9 100644 --- a/Include/patchlevel.h +++ b/Include/patchlevel.h @@ -20,10 +20,10 @@ #define PY_MINOR_VERSION 3 #define PY_MICRO_VERSION 3 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_GAMMA -#define PY_RELEASE_SERIAL 1 +#define PY_RELEASE_SERIAL 2 /* Version as a string */ -#define PY_VERSION "3.3.3rc1" +#define PY_VERSION "3.3.3rc2" /*--end constants--*/ /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. diff --git a/Lib/distutils/__init__.py b/Lib/distutils/__init__.py index 812d8f3..0650dd2 100644 --- a/Lib/distutils/__init__.py +++ b/Lib/distutils/__init__.py @@ -13,5 +13,5 @@ used from a setup script as # Updated automatically by the Python release process. # #--start constants-- -__version__ = "3.3.3rc1" +__version__ = "3.3.3rc2" #--end constants-- diff --git a/Lib/idlelib/idlever.py b/Lib/idlelib/idlever.py index 640e008..c1e6476 100644 --- a/Lib/idlelib/idlever.py +++ b/Lib/idlelib/idlever.py @@ -1 +1 @@ -IDLE_VERSION = "3.3.3rc1" +IDLE_VERSION = "3.3.3rc2" diff --git a/Misc/NEWS b/Misc/NEWS index dfb6068..21783ff 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -2,14 +2,17 @@ Python News +++++++++++ -What's New in Python 3.3.3? -=========================== +What's New in Python 3.3.3 release candidate 2? +=============================================== -*Release date: XX-Nov-2013* +*Release date: 11-Nov-2013* Library ------- +- Issue #19227: Any re-seeding of the OpenSSL RNG on fork has been removed; + this should be handled by OpenSSL itself or by the application. + - Issue #19435: Fix directory traversal attack on CGIHttpRequestHandler. Tests diff --git a/Misc/RPM/python-3.3.spec b/Misc/RPM/python-3.3.spec index c324559..8e2a012 100644 --- a/Misc/RPM/python-3.3.spec +++ b/Misc/RPM/python-3.3.spec @@ -39,7 +39,7 @@ %define name python #--start constants-- -%define version 3.3.3rc1 +%define version 3.3.3rc2 %define libvers 3.3 #--end constants-- %define release 1pydotorg diff --git a/README b/README index 12548b7..c9be112 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -This is Python version 3.3.3 release candidate 1 +This is Python version 3.3.3 release candidate 2 ================================================ Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, -- cgit v0.12 From 53171b5987814166517d4ed25c4da2c98d1d1ac5 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Mon, 11 Nov 2013 06:16:15 +0100 Subject: Added tag v3.3.3rc2 for changeset d32442c0e60d --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 78b30dd..df140ca 100644 --- a/.hgtags +++ b/.hgtags @@ -116,3 +116,4 @@ bd8afb90ebf28ba4edc901d4a235f75e7bbc79fd v3.3.0 d9893d13c6289aa03d33559ec67f97dcbf5c9e3c v3.3.1 d047928ae3f6314a13b6137051315453d0ae89b6 v3.3.2 fd53c500f8b80f54f3ecedec9da2e8c7e52a6888 v3.3.3rc1 +d32442c0e60dfbd71234e807d3d1dedd227495a9 v3.3.3rc2 -- cgit v0.12 From 9e2043a5613a6423b7051b08a916b01969c179ed Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 17 Nov 2013 07:58:22 +0100 Subject: Bump to 3.3.3 final. --- Include/patchlevel.h | 6 +++--- Lib/distutils/__init__.py | 2 +- Lib/idlelib/idlever.py | 2 +- Misc/NEWS | 8 ++++++++ Misc/RPM/python-3.3.spec | 2 +- README | 4 ++-- 6 files changed, 16 insertions(+), 8 deletions(-) diff --git a/Include/patchlevel.h b/Include/patchlevel.h index 3ae5dc9..69ab168 100644 --- a/Include/patchlevel.h +++ b/Include/patchlevel.h @@ -19,11 +19,11 @@ #define PY_MAJOR_VERSION 3 #define PY_MINOR_VERSION 3 #define PY_MICRO_VERSION 3 -#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_GAMMA -#define PY_RELEASE_SERIAL 2 +#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL +#define PY_RELEASE_SERIAL 0 /* Version as a string */ -#define PY_VERSION "3.3.3rc2" +#define PY_VERSION "3.3.3" /*--end constants--*/ /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. diff --git a/Lib/distutils/__init__.py b/Lib/distutils/__init__.py index 0650dd2..6747ab8 100644 --- a/Lib/distutils/__init__.py +++ b/Lib/distutils/__init__.py @@ -13,5 +13,5 @@ used from a setup script as # Updated automatically by the Python release process. # #--start constants-- -__version__ = "3.3.3rc2" +__version__ = "3.3.3" #--end constants-- diff --git a/Lib/idlelib/idlever.py b/Lib/idlelib/idlever.py index c1e6476..60f1d32 100644 --- a/Lib/idlelib/idlever.py +++ b/Lib/idlelib/idlever.py @@ -1 +1 @@ -IDLE_VERSION = "3.3.3rc2" +IDLE_VERSION = "3.3.3" diff --git a/Misc/NEWS b/Misc/NEWS index 21783ff..140b487 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -2,6 +2,14 @@ Python News +++++++++++ +What's New in Python 3.3.3? +=========================== + +*Release date: 17-Nov-2013* + +No changes from release candidate 2. + + What's New in Python 3.3.3 release candidate 2? =============================================== diff --git a/Misc/RPM/python-3.3.spec b/Misc/RPM/python-3.3.spec index 8e2a012..b8b57e2 100644 --- a/Misc/RPM/python-3.3.spec +++ b/Misc/RPM/python-3.3.spec @@ -39,7 +39,7 @@ %define name python #--start constants-- -%define version 3.3.3rc2 +%define version 3.3.3 %define libvers 3.3 #--end constants-- %define release 1pydotorg diff --git a/README b/README index c9be112..f6f8ea0 100644 --- a/README +++ b/README @@ -1,5 +1,5 @@ -This is Python version 3.3.3 release candidate 2 -================================================ +This is Python version 3.3.3 +============================ Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Python Software Foundation. All rights reserved. -- cgit v0.12 From 7a5cf6ce041fefd63ba8b088464901e6052bd9e7 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 17 Nov 2013 07:59:06 +0100 Subject: Added tag v3.3.3 for changeset c3896275c0f6 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index df140ca..7801acf 100644 --- a/.hgtags +++ b/.hgtags @@ -117,3 +117,4 @@ d9893d13c6289aa03d33559ec67f97dcbf5c9e3c v3.3.1 d047928ae3f6314a13b6137051315453d0ae89b6 v3.3.2 fd53c500f8b80f54f3ecedec9da2e8c7e52a6888 v3.3.3rc1 d32442c0e60dfbd71234e807d3d1dedd227495a9 v3.3.3rc2 +c3896275c0f61b2510a6c7e6c458a750359a91b8 v3.3.3 -- cgit v0.12