]> granicus.if.org Git - python/commitdiff
bpo-33720: Reduces maximum marshal recursion depth on release builds. (GH-7401)
authorSteve Dower <steve.dower@microsoft.com>
Mon, 4 Jun 2018 20:25:00 +0000 (13:25 -0700)
committerGitHub <noreply@github.com>
Mon, 4 Jun 2018 20:25:00 +0000 (13:25 -0700)
Lib/test/test_marshal.py
Misc/NEWS.d/next/Windows/2018-06-04-09-20-53.bpo-33720.VKDXHK.rst [new file with mode: 0644]
Python/marshal.c

index 29dda987d0bb7f28c59e16ccb4769acb469ce00a..a8a43d22bc365167ba84fb89fbfee624348670cb 100644 (file)
@@ -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 (file)
index 0000000..f7e2f9d
--- /dev/null
@@ -0,0 +1 @@
+Reduces maximum marshal recursion depth on release builds.
index e23daf6497b455809952d9942da79bf8c565f31e..6d06266c6a8e2e78d167fa2ecfe8e4bb961d999c 100644 (file)
@@ -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