summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2016-07-07 06:37:02 (GMT)
committerBenjamin Peterson <benjamin@python.org>2016-07-07 06:37:02 (GMT)
commit64c82753de70f312c80797f63b6b8b98232b6f0f (patch)
tree0253098623eeb44e0e417d126bd3da183400b5f9
parentee69451f344847858919bacf00a087c77f381264 (diff)
downloadcpython-64c82753de70f312c80797f63b6b8b98232b6f0f.zip
cpython-64c82753de70f312c80797f63b6b8b98232b6f0f.tar.gz
cpython-64c82753de70f312c80797f63b6b8b98232b6f0f.tar.bz2
reduce marshal stack size in debug mode on windows (closes #27019)
-rw-r--r--Lib/test/test_marshal.py5
-rw-r--r--Python/marshal.c5
2 files changed, 9 insertions, 1 deletions
diff --git a/Lib/test/test_marshal.py b/Lib/test/test_marshal.py
index 1967c48..76d59ba 100644
--- a/Lib/test/test_marshal.py
+++ b/Lib/test/test_marshal.py
@@ -234,7 +234,10 @@ class BugsTestCase(unittest.TestCase):
# Create a deeply nested structure.
head = last = []
# The max stack depth should match the value in Python/marshal.c.
- MAX_MARSHAL_STACK_DEPTH = 2000
+ if os.name == 'nt' and hasattr(sys, 'gettotalrefcount'):
+ MAX_MARSHAL_STACK_DEPTH = 1000
+ else:
+ MAX_MARSHAL_STACK_DEPTH = 2000
for i in range(MAX_MARSHAL_STACK_DEPTH - 2):
last.append([0])
last = last[-1]
diff --git a/Python/marshal.c b/Python/marshal.c
index 6b285aa..e1a84d0 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -16,8 +16,13 @@
/* High water mark to determine when the marshalled object is dangerously deep
* 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.
*/
+#if defined(MS_WINDOWS) && defined(_DEBUG)
+#define MAX_MARSHAL_STACK_DEPTH 1000
+#else
#define MAX_MARSHAL_STACK_DEPTH 2000
+#endif
#define TYPE_NULL '0'
#define TYPE_NONE 'N'