Author: Amaury Forgeot d'Arc <amaur...@gmail.com>
Branch: py3.3
Changeset: r73872:ec5e03429d1d
Date: 2014-10-09 22:03 +0200
http://bitbucket.org/pypy/pypy/changeset/ec5e03429d1d/

Log:    Really validate the ast in compile()...

diff --git a/pypy/module/__builtin__/compiling.py 
b/pypy/module/__builtin__/compiling.py
--- a/pypy/module/__builtin__/compiling.py
+++ b/pypy/module/__builtin__/compiling.py
@@ -45,6 +45,7 @@
 
     if space.isinstance_w(w_source, space.gettypeobject(ast.W_AST.typedef)):
         ast_node = ast.mod.from_object(space, w_source)
+        ec.compiler.validate_ast(ast_node)
         code = ec.compiler.compile_ast(ast_node, filename, mode, flags,
                                        optimize=optimize)
         return space.wrap(code)
diff --git a/pypy/module/_ast/test/test_ast.py 
b/pypy/module/_ast/test/test_ast.py
--- a/pypy/module/_ast/test/test_ast.py
+++ b/pypy/module/_ast/test/test_ast.py
@@ -449,3 +449,26 @@
         empty_yield_from.body[0].body[0].value.value = None
         exc = raises(ValueError, compile, empty_yield_from, "<test>", "exec")
         assert "field value is required" in str(exc.value)
+
+    def test_compare(self):
+        import ast
+        
+        def _mod(mod, msg=None, mode="exec", exc=ValueError):
+            mod.lineno = mod.col_offset = 0
+            ast.fix_missing_locations(mod)
+            exc = raises(exc, compile, mod, "<test>", mode)
+            if msg is not None:
+                assert msg in str(exc.value)
+        def _expr(node, msg=None, exc=ValueError):
+            mod = ast.Module([ast.Expr(node)])
+            _mod(mod, msg, exc=exc)
+        left = ast.Name("x", ast.Load())
+        comp = ast.Compare(left, [ast.In()], [])
+        _expr(comp, "no comparators")
+        comp = ast.Compare(left, [ast.In()], [ast.Num(4), ast.Num(5)])
+        _expr(comp, "different number of comparators and operands")
+        comp = ast.Compare(ast.Num("blah"), [ast.In()], [left])
+        _expr(comp, "non-numeric", exc=TypeError)
+        comp = ast.Compare(left, [ast.In()], [ast.Num("blah")])
+        _expr(comp, "non-numeric", exc=TypeError)
+
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to