diff options
author | Steve Dower <steve.dower@microsoft.com> | 2018-06-04 20:25:00 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-04 20:25:00 (GMT) |
commit | 2a4a62ba4ae770bbc7b7fdec0760031c83fe1f7b (patch) | |
tree | 733d41607d331ca4401a34ad06908f5549c3aaa1 | |
parent | b609e687a076d77bdd687f5e4def85e29a044bfc (diff) | |
download | cpython-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.py | 5 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Windows/2018-06-04-09-20-53.bpo-33720.VKDXHK.rst | 1 | ||||
-rw-r--r-- | Python/marshal.c | 8 |
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 |