Core and Builtins
-----------------
-- Issue #24467: Fixed possible buffer over-read in bytearray. The bytearray
- object now always allocates place for trailing null byte and it's buffer now
- is always null-terminated.
+- Issue #23573: Restored optimization of bytes.rfind() and bytearray.rfind()
+ for single-byte argument on Linux.
-- Issue #24115: Update uses of PyObject_IsTrue(), PyObject_Not(),
- PyObject_IsInstance(), PyObject_RichCompareBool() and _PyDict_Contains()
- to check for and handle errors correctly.
+- Issue #24569: Make PEP 448 dictionary evaluation more consistent.
-- Issue #24257: Fixed system error in the comparison of faked
- types.SimpleNamespace.
+- Issue #24583: Fix crash when set is mutated while being updated.
-- Issue #22939: Fixed integer overflow in iterator object. Patch by
- Clement Rouault.
+- Issue #24407: Fix crash when dict is mutated while being updated.
-- Issue #23985: Fix a possible buffer overrun when deleting a slice from
- the front of a bytearray and then appending some other bytes data.
+Library
+-------
-- Issue #24102: Fixed exception type checking in standard error handlers.
+- Issue #24580: Symbolic group references to open group in re patterns now are
+ explicitly forbidden as well as numeric group references.
-- Issue #23757: PySequence_Tuple() incorrectly called the concrete list API
- when the data was a list subclass.
+- Issue #24206: Fixed __eq__ and __ne__ methods of inspect classes.
-- Issue #24407: Fix crash when dict is mutated while being updated.
+- Issue #24631: Fixed regression in the timeit module with multiline setup.
-- Issue #24096: Make warnings.warn_explicit more robust against mutation of the
- warnings.filters list.
+- Issue #18622: unittest.mock.mock_open().reset_mock would recurse infinitely.
+ Patch from Nicola Palumbo and Laurent De Buyst.
-- Issue #23996: Avoid a crash when a delegated generator raises an
- unnormalized StopIteration exception. Patch by Stefan Behnel.
+- Issue #23661: unittest.mock side_effects can now be exceptions again. This
+ was a regression vs Python 3.4. Patch from Ignacio Rossi
-- Issue #24022: Fix tokenizer crash when processing undecodable source code.
+- Issue #24608: chunk.Chunk.read() now always returns bytes, not str.
-- Issue #23309: Avoid a deadlock at shutdown if a daemon thread is aborted
- while it is holding a lock to a buffered I/O object, and the main thread
- tries to use the same I/O object (typically stdout or stderr). A fatal
- error is emitted instead.
+- Issue #18684: Fixed reading out of the buffer in the re module.
-- Issue #22977: Fixed formatting Windows error messages on Wine.
- Patch by Martin Panter.
+- Issue #24259: tarfile now raises a ReadError if an archive is truncated
+ inside a data segment.
-- Issue #23803: Fixed str.partition() and str.rpartition() when a separator
- is wider then partitioned string.
+- Issue #15014: SMTP.auth() and SMTP.login() now support RFC 4954's optional
+ initial-response argument to the SMTP AUTH command.
-- Issue #23192: Fixed generator lambdas. Patch by Bruno Cauet.
+- Issue #24669: Fix inspect.getsource() for 'async def' functions.
+ Patch by Kai Groner.
-- Issue #23629: Fix the default __sizeof__ implementation for variable-sized
- objects.
++Build
++-----
+
-- Issue #24044: Fix possible null pointer dereference in list.sort in out of
- memory conditions.
++- Issue #24603: Update the Windows build to use OpenSSL 1.0.2d.
+
-- Issue #21354: PyCFunction_New function is exposed by python DLL again.
-Library
--------
+What's New in Python 3.5.0 beta 3?
+==================================
-- Issue #24206: Fixed __eq__ and __ne__ methods of inspect classes.
+Release date: 2015-07-05
-- Issue #21750: mock_open.read_data can now be read from each instance, as it
- could in Python 3.3.
+Core and Builtins
+-----------------
-- Issue #23247: Fix a crash in the StreamWriter.reset() of CJK codecs.
+- Issue #24467: Fixed possible buffer over-read in bytearray. The bytearray
+ object now always allocates place for trailing null byte and it's buffer now
+ is always null-terminated.
-- Issue #18622: unittest.mock.mock_open().reset_mock would recurse infinitely.
- Patch from Nicola Palumbo and Laurent De Buyst.
+- Upgrade to Unicode 8.0.0.
-- Issue #24608: chunk.Chunk.read() now always returns bytes, not str.
+- Issue #24345: Add Py_tp_finalize slot for the stable ABI.
-- Issue #18684: Fixed reading out of the buffer in the re module.
+- Issue #24400: Introduce a distinct type for PEP 492 coroutines; add
+ types.CoroutineType, inspect.getcoroutinestate, inspect.getcoroutinelocals;
+ coroutines no longer use CO_GENERATOR flag; sys.set_coroutine_wrapper
+ works only for 'async def' coroutines; inspect.iscoroutine no longer
+ uses collections.abc.Coroutine, it's intended to test for pure 'async def'
+ coroutines only; add new opcode: GET_YIELD_FROM_ITER; fix generators wrapper
+ used in types.coroutine to be instance of collections.abc.Generator;
+ collections.abc.Awaitable and collections.abc.Coroutine can no longer
+ be used to detect generator-based coroutines--use inspect.isawaitable
+ instead.
-- Issue #24259: tarfile now raises a ReadError if an archive is truncated
- inside a data segment.
+- Issue #24450: Add gi_yieldfrom to generators and cr_await to coroutines.
+ Contributed by Benno Leslie and Yury Selivanov.
+
+- Issue #19235: Add new RecursionError exception. Patch by Georg Brandl.
+
+Library
+-------
+
+- Issue #21750: mock_open.read_data can now be read from each instance, as it
+ could in Python 3.3.
- Issue #24552: Fix use after free in an error case of the _pickle module.
--- /dev/null
- <opensslDir>$(ExternalsDir)openssl-1.0.2c\</opensslDir>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Platform Condition="'$(Platform)' == ''">Win32</Platform>
+ <Configuration Condition="'$(Configuration)' == ''">Release</Configuration>
+ <!--
+ Use the latest available version of Visual Studio to build. To override
+ this and build with an earlier version, pass "/p:PlatformToolset=v100"
+ (for example) when building.
+ -->
+ <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(VCTargetsPath14)' != ''">v140</PlatformToolset>
+ <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(VCTargetsPath12)' != ''">v120</PlatformToolset>
+ <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(VCTargetsPath11)' != ''">v110</PlatformToolset>
+ <PlatformToolset Condition="'$(PlatformToolset)' == '' and '$(VCTargetsPath10)' != ''">v100</PlatformToolset>
+
+ <!--
+ Convincing MSVC/MSBuild to prefer our platform names is too difficult,
+ so we define our own constant ArchName and use wherever we need it.
+ -->
+ <ArchName Condition="'$(ArchName)' == '' and $(Platform) == 'x64'">amd64</ArchName>
+ <ArchName Condition="'$(ArchName)' == ''">win32</ArchName>
+ <ArchName Condition="$(Configuration) == 'PGInstrument' or $(Configuration) == 'PGUpdate'">$(ArchName)-pgo</ArchName>
+
+ <!-- Root directory of the repository -->
+ <PySourcePath Condition="'$(PySourcePath)' == ''">$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)\..\))</PySourcePath>
+ <PySourcePath Condition="!HasTrailingSlash($(PySourcePath))">$(PySourcePath)\</PySourcePath>
+
+ <!-- Directory where build outputs are put -->
+ <BuildPath Condition="'$(BuildPath)' == ''">$(PySourcePath)PCBuild\$(ArchName)\</BuildPath>
+ <BuildPath Condition="!HasTrailingSlash($(BuildPath))">$(BuildPath)\</BuildPath>
+
+ <!-- Directories of external projects. tcltk is handled in tcltk.props -->
+ <ExternalsDir>$([System.IO.Path]::GetFullPath(`$(PySourcePath)externals\`))</ExternalsDir>
+ <sqlite3Dir>$(ExternalsDir)sqlite-3.8.3.1\</sqlite3Dir>
+ <bz2Dir>$(ExternalsDir)bzip2-1.0.6\</bz2Dir>
+ <lzmaDir>$(ExternalsDir)xz-5.0.5\</lzmaDir>
++ <opensslDir>$(ExternalsDir)openssl-1.0.2d\</opensslDir>
+ <nasmDir>$(ExternalsDir)\nasm-2.11.06\</nasmDir>
+
+ <!-- Suffix for all binaries when building for debug -->
+ <PyDebugExt Condition="'$(PyDebugExt)' == '' and $(Configuration) == 'Debug'">_d</PyDebugExt>
+
+ <!-- Full path of the resulting python.exe binary -->
+ <PythonExe Condition="'$(PythonExe)' == ''">$(BuildPath)python$(PyDebugExt).exe</PythonExe>
+ </PropertyGroup>
+
+ <PropertyGroup Condition="'$(OverrideVersion)' == ''">
+ <!--
+ Read version information from Include\patchlevel.h. The following properties are set:
+
+ MajorVersionNumber - the '3' in '3.5.2a1'
+ MinorVersionNumber - the '5' in '3.5.2a1'
+ MicroVersionNumber - the '2' in '3.5.2a1'
+ ReleaseSerial - the '1' in '3.5.2a1'
+ ReleaseLevelName - the 'a1' in '3.5.2a1'
+ PythonVersionNumber - '3.5.2' for '3.5.2a1'
+ PythonVersion - '3.5.2a1'
+ PythonVersionHex - 0x030502a1 for '3.5.2a1'
+ ReleaseLevelNumber - 10 for alpha, 11 for beta, 12 for RC (gamma), and 15 for final
+ Field3Value - 2101 for '3.5.2a1' (== 1000*2 + 10*10 ('a') + 1)
+ -->
+ <_PatchLevelContent>$([System.IO.File]::ReadAllText(`$(PySourcePath)Include\patchlevel.h`))</_PatchLevelContent>
+ <MajorVersionNumber>$([System.Text.RegularExpressions.Regex]::Match($(_PatchLevelContent), `define\s+PY_MAJOR_VERSION\s+(\d+)`).Groups[1].Value)</MajorVersionNumber>
+ <MinorVersionNumber>$([System.Text.RegularExpressions.Regex]::Match($(_PatchLevelContent), `define\s+PY_MINOR_VERSION\s+(\d+)`).Groups[1].Value)</MinorVersionNumber>
+ <MicroVersionNumber>$([System.Text.RegularExpressions.Regex]::Match($(_PatchLevelContent), `define\s+PY_MICRO_VERSION\s+(\d+)`).Groups[1].Value)</MicroVersionNumber>
+ <_ReleaseLevel>$([System.Text.RegularExpressions.Regex]::Match($(_PatchLevelContent), `define\s+PY_RELEASE_LEVEL\s+PY_RELEASE_LEVEL_(\w+)`).Groups[1].Value)</_ReleaseLevel>
+ <ReleaseSerial>$([System.Text.RegularExpressions.Regex]::Match($(_PatchLevelContent), `define\s+PY_RELEASE_SERIAL\s+(\d+)`).Groups[1].Value)</ReleaseSerial>
+ <ReleaseLevelNumber>15</ReleaseLevelNumber>
+ <ReleaseLevelNumber Condition="$(_ReleaseLevel) == 'ALPHA'">10</ReleaseLevelNumber>
+ <ReleaseLevelNumber Condition="$(_ReleaseLevel) == 'BETA'">11</ReleaseLevelNumber>
+ <ReleaseLevelNumber Condition="$(_ReleaseLevel) == 'GAMMA'">12</ReleaseLevelNumber>
+ <ReleaseLevelName Condition="$(_ReleaseLevel) == 'ALPHA'">a$(ReleaseSerial)</ReleaseLevelName>
+ <ReleaseLevelName Condition="$(_ReleaseLevel) == 'BETA'">b$(ReleaseSerial)</ReleaseLevelName>
+ <ReleaseLevelName Condition="$(_ReleaseLevel) == 'GAMMA'">rc$(ReleaseSerial)</ReleaseLevelName>
+ </PropertyGroup>
+
+ <PropertyGroup Condition="'$(OverrideVersion)' != ''">
+ <!--
+ Override the version number when building by specifying OverrideVersion.
+ For example:
+
+ PCBuild\build.bat "/p:OverrideVersion=3.5.2a1"
+
+ Use the -V option to check your version is valid:
+
+ PCBuild\build.bat -V "/p:OverrideVersion=3.5.2a1"
+ PythonVersionNumber: 3.5.2
+ PythonVersion: 3.5.2a1
+ PythonVersionHex: 0x030502A1
+ Field3Value: 2101
+
+ Note that this only affects the version numbers embedded in resources and
+ installers, but not sys.version.
+ -->
+ <MajorVersionNumber>$([System.Text.RegularExpressions.Regex]::Match($(OverrideVersion), `(\d+)\.(\d+)\.(\d+)((a|b|rc)(\d))?`).Groups[1].Value)</MajorVersionNumber>
+ <MinorVersionNumber>$([System.Text.RegularExpressions.Regex]::Match($(OverrideVersion), `(\d+)\.(\d+)\.(\d+)((a|b|rc)(\d))?`).Groups[2].Value)</MinorVersionNumber>
+ <MicroVersionNumber>$([System.Text.RegularExpressions.Regex]::Match($(OverrideVersion), `(\d+)\.(\d+)\.(\d+)((a|b|rc)(\d))?`).Groups[3].Value)</MicroVersionNumber>
+ <ReleaseLevelName>$([System.Text.RegularExpressions.Regex]::Match($(OverrideVersion), `(\d+)\.(\d+)\.(\d+)((a|b|rc)(\d))?`).Groups[4].Value)</ReleaseLevelName>
+ <_ReleaseLevel>$([System.Text.RegularExpressions.Regex]::Match($(OverrideVersion), `(\d+)\.(\d+)\.(\d+)((a|b|rc)(\d))?`).Groups[5].Value)</_ReleaseLevel>
+ <ReleaseSerial>$([System.Text.RegularExpressions.Regex]::Match($(OverrideVersion), `(\d+)\.(\d+)\.(\d+)((a|b|rc)(\d))?`).Groups[6].Value)</ReleaseSerial>
+ <ReleaseSerial Condition="'$(ReleaseSerial)' == ''">0</ReleaseSerial>
+ <ReleaseLevelNumber>15</ReleaseLevelNumber>
+ <ReleaseLevelNumber Condition="$(_ReleaseLevel) == 'a'">10</ReleaseLevelNumber>
+ <ReleaseLevelNumber Condition="$(_ReleaseLevel) == 'b'">11</ReleaseLevelNumber>
+ <ReleaseLevelNumber Condition="$(_ReleaseLevel) == 'rc'">12</ReleaseLevelNumber>
+ </PropertyGroup>
+
+ <PropertyGroup>
+ <PythonVersionNumber>$(MajorVersionNumber).$(MinorVersionNumber).$(MicroVersionNumber)</PythonVersionNumber>
+ <PythonVersion>$(MajorVersionNumber).$(MinorVersionNumber).$(MicroVersionNumber)$(ReleaseLevelName)</PythonVersion>
+ <PythonVersionHex>$([msbuild]::BitwiseOr(
+ $([msbuild]::Multiply($(MajorVersionNumber), 16777216)),
+ $([msbuild]::BitwiseOr(
+ $([msbuild]::Multiply($(MinorVersionNumber), 65536)),
+ $([msbuild]::BitwiseOr(
+ $([msbuild]::Multiply($(MicroVersionNumber), 256)),
+ $([msbuild]::BitwiseOr(
+ $([msbuild]::Multiply($(ReleaseLevelNumber), 16)),
+ $(ReleaseSerial)
+ ))
+ ))
+ ))
+ ))</PythonVersionHex>
+ <Field3Value>$([msbuild]::Add(
+ $(ReleaseSerial),
+ $([msbuild]::Add(
+ $([msbuild]::Multiply($(ReleaseLevelNumber), 10)),
+ $([msbuild]::Multiply($(MicroVersionNumber), 1000))
+ ))
+ ))</Field3Value>
+
+ <!-- The name of the resulting pythonXY.dll (without the extension) -->
+ <PyDllName>python$(MajorVersionNumber)$(MinorVersionNumber)$(PyDebugExt)</PyDllName>
+
+ <!-- The version and platform tag to include in .pyd filenames -->
+ <PydTag Condition="$(Platform) == 'Win32' or $(Platform) == 'x86'">.cp$(MajorVersionNumber)$(MinorVersionNumber)-win32</PydTag>
+ <PydTag Condition="$(Platform) == 'x64'">.cp$(MajorVersionNumber)$(MinorVersionNumber)-win_amd64</PydTag>
+
+ <!-- The version number for sys.winver -->
+ <SysWinVer>$(MajorVersionNumber).$(MinorVersionNumber)</SysWinVer>
+ <SysWinVer Condition="$(Platform) == 'Win32' or $(Platform) == 'x86'">$(SysWinVer)-32</SysWinVer>
+ </PropertyGroup>
+
+ <!-- Displays the calculated version info -->
+ <Target Name="ShowVersionInfo">
+ <Message Importance="high" Text="PythonVersionNumber: $(PythonVersionNumber)" />
+ <Message Importance="high" Text="PythonVersion: $(PythonVersion)" />
+ <Message Importance="high" Text="PythonVersionHex: 0x$([System.UInt32]::Parse($(PythonVersionHex)).ToString(`X08`))" />
+ <Message Importance="high" Text="Field3Value: $(Field3Value)" />
+ </Target>
+</Project>