From: Steve Dower Date: Mon, 4 Jun 2018 20:25:00 +0000 (-0700) Subject: bpo-33720: Reduces maximum marshal recursion depth on release builds. (GH-7401) X-Git-Tag: v3.8.0a1~1668 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2a4a62ba4ae770bbc7b7fdec0760031c83fe1f7b;p=python bpo-33720: Reduces maximum marshal recursion depth on release builds. (GH-7401) --- diff --git a/Lib/test/test_marshal.py b/Lib/test/test_marshal.py index 29dda987d0..a8a43d22bc 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 0000000000..f7e2f9d1ea --- /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 e23daf6497..6d06266c6a 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