summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Dower <steve.dower@microsoft.com>2018-06-04 20:25:00 (GMT)
committerGitHub <noreply@github.com>2018-06-04 20:25:00 (GMT)
commit2a4a62ba4ae770bbc7b7fdec0760031c83fe1f7b (patch)
tree733d41607d331ca4401a34ad06908f5549c3aaa1
parentb609e687a076d77bdd687f5e4def85e29a044bfc (diff)
downloadcpython-2a4a62ba4ae770bbc7b7fdec0760031c83fe1f7b.zip
cpython-2a4a62ba4ae770bbc7b7fdec0760031c83fe1f7b.tar.gz
cpython-2a4a62ba4ae770bbc7b7fdec0760031c83fe1f7b.tar.bz2
bpo-33720: Reduces maximum marshal recursion depth on release builds. (GH-7401)
-rw-r--r--Lib/test/test_marshal.py5
-rw-r--r--Misc/NEWS.d/next/Windows/2018-06-04-09-20-53.bpo-33720.VKDXHK.rst1
-rw-r--r--Python/marshal.c8
3 files changed, 12 insertions, 2 deletions
diff --git a/Lib/test/test_marshal.py b/Lib/test/test_marshal.py
index 29dda98..a8a43d2 100644
--- a/Lib/test/test_marshal.py
+++ b/Lib/test/test_marshal.py
@@ -222,7 +222,10 @@ class BugsTestCase(unittest.TestCase):
# Create a deeply nested structure.
head = last = []
# The max stack depth should match the value in Python/marshal.c.
- if os.name == 'nt' and hasattr(sys, 'gettotalrefcount'):
+ # BUG: https://bugs.python.org/issue33720
+ # Windows always limits the maximum depth on release and debug builds
+ #if os.name == 'nt' and hasattr(sys, 'gettotalrefcount'):
+ if os.name == 'nt':
MAX_MARSHAL_STACK_DEPTH = 1000
else:
MAX_MARSHAL_STACK_DEPTH = 2000
diff --git a/Misc/NEWS.d/next/Windows/2018-06-04-09-20-53.bpo-33720.VKDXHK.rst b/Misc/NEWS.d/next/Windows/2018-06-04-09-20-53.bpo-33720.VKDXHK.rst
new file mode 100644
index 0000000..f7e2f9d
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2018-06-04-09-20-53.bpo-33720.VKDXHK.rst
@@ -0,0 +1 @@
+Reduces maximum marshal recursion depth on release builds.
diff --git a/Python/marshal.c b/Python/marshal.c
index e23daf6..6d06266 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -25,8 +25,14 @@ module marshal
* and risks coring the interpreter. When the object stack gets this deep,
* raise an exception instead of continuing.
* On Windows debug builds, reduce this value.
+ *
+ * BUG: https://bugs.python.org/issue33720
+ * On Windows PGO builds, the r_object function overallocates its stack and
+ * can cause a stack overflow. We reduce the maximum depth for all Windows
+ * releases to protect against this.
+ * #if defined(MS_WINDOWS) && defined(_DEBUG)
*/
-#if defined(MS_WINDOWS) && defined(_DEBUG)
+#if defined(MS_WINDOWS)
#define MAX_MARSHAL_STACK_DEPTH 1000
#else
#define MAX_MARSHAL_STACK_DEPTH 2000