summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFacundo Batista <facundobatista@gmail.com>2008-02-23 12:01:13 +0000
committerFacundo Batista <facundobatista@gmail.com>2008-02-23 12:01:13 +0000
commitfc2d01032fa4eb2d5563c2619811d05567faf528 (patch)
tree735d908f0418bacf869c516b8deb6b545f5cacba
parent7832d4d534ff7105a0253694db734d5007b62e91 (diff)
downloadcpython-git-fc2d01032fa4eb2d5563c2619811d05567faf528.tar.gz
Issue 1881. Increased the stack limit from 500 to 1500. Also added
a test for this (and because of this test you'll see in stderr a message that parser.c sends before raising MemoryError). Thanks Ralf Schmitt.
-rw-r--r--Lib/test/test_parser.py17
-rw-r--r--Misc/NEWS3
-rw-r--r--Parser/parser.h2
3 files changed, 21 insertions, 1 deletions
diff --git a/Lib/test/test_parser.py b/Lib/test/test_parser.py
index fd2861034d..411911211a 100644
--- a/Lib/test/test_parser.py
+++ b/Lib/test/test_parser.py
@@ -480,11 +480,28 @@ class CompileTestCase(unittest.TestCase):
st = parser.suite('a = u"\u1"')
self.assertRaises(SyntaxError, parser.compilest, st)
+class ParserStackLimitTestCase(unittest.TestCase):
+ """try to push the parser to/over it's limits.
+ see http://bugs.python.org/issue1881 for a discussion
+ """
+ def _nested_expression(self, level):
+ return "["*level+"]"*level
+
+ def test_deeply_nested_list(self):
+ e = self._nested_expression(99)
+ st = parser.expr(e)
+ st.compile()
+
+ def test_trigger_memory_error(self):
+ e = self._nested_expression(100)
+ self.assertRaises(MemoryError, parser.expr, e)
+
def test_main():
test_support.run_unittest(
RoundtripLegalSyntaxTestCase,
IllegalSyntaxTestCase,
CompileTestCase,
+ ParserStackLimitTestCase,
)
diff --git a/Misc/NEWS b/Misc/NEWS
index 2921cb2af9..a33bf714c4 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 2.6 alpha 1?
Core and builtins
-----------------
+- Issue #1881: An internal parser limit has been increased. Also see
+ issue 215555 for a discussion.
+
- Added the future_builtins module, which contains hex() and oct().
These are the PEP 3127 version of these functions, designed to be
compatible with the hex() and oct() builtins from Python 3.0. They
diff --git a/Parser/parser.h b/Parser/parser.h
index bdca3e9440..403236d1ea 100644
--- a/Parser/parser.h
+++ b/Parser/parser.h
@@ -7,7 +7,7 @@ extern "C" {
/* Parser interface */
-#define MAXSTACK 500
+#define MAXSTACK 1500
typedef struct {
int s_state; /* State in current DFA */