bpo-31778: Make ast.literal_eval() more strict. (#4035) · python/cpython@d8ac4d1

@@ -551,14 +551,37 @@ def test_literal_eval(self):

551551

self.assertEqual(ast.literal_eval('{1, 2, 3}'), {1, 2, 3})

552552

self.assertEqual(ast.literal_eval('b"hi"'), b"hi")

553553

self.assertRaises(ValueError, ast.literal_eval, 'foo()')

554+

self.assertEqual(ast.literal_eval('6'), 6)

555+

self.assertEqual(ast.literal_eval('+6'), 6)

554556

self.assertEqual(ast.literal_eval('-6'), -6)

555-

self.assertEqual(ast.literal_eval('-6j+3'), 3-6j)

556557

self.assertEqual(ast.literal_eval('3.25'), 3.25)

557-558-

def test_literal_eval_issue4907(self):

559-

self.assertEqual(ast.literal_eval('2j'), 2j)

560-

self.assertEqual(ast.literal_eval('10 + 2j'), 10 + 2j)

561-

self.assertEqual(ast.literal_eval('1.5 - 2j'), 1.5 - 2j)

558+

self.assertEqual(ast.literal_eval('+3.25'), 3.25)

559+

self.assertEqual(ast.literal_eval('-3.25'), -3.25)

560+

self.assertEqual(repr(ast.literal_eval('-0.0')), '-0.0')

561+

self.assertRaises(ValueError, ast.literal_eval, '++6')

562+

self.assertRaises(ValueError, ast.literal_eval, '+True')

563+

self.assertRaises(ValueError, ast.literal_eval, '2+3')

564+565+

def test_literal_eval_complex(self):

566+

# Issue #4907

567+

self.assertEqual(ast.literal_eval('6j'), 6j)

568+

self.assertEqual(ast.literal_eval('-6j'), -6j)

569+

self.assertEqual(ast.literal_eval('6.75j'), 6.75j)

570+

self.assertEqual(ast.literal_eval('-6.75j'), -6.75j)

571+

self.assertEqual(ast.literal_eval('3+6j'), 3+6j)

572+

self.assertEqual(ast.literal_eval('-3+6j'), -3+6j)

573+

self.assertEqual(ast.literal_eval('3-6j'), 3-6j)

574+

self.assertEqual(ast.literal_eval('-3-6j'), -3-6j)

575+

self.assertEqual(ast.literal_eval('3.25+6.75j'), 3.25+6.75j)

576+

self.assertEqual(ast.literal_eval('-3.25+6.75j'), -3.25+6.75j)

577+

self.assertEqual(ast.literal_eval('3.25-6.75j'), 3.25-6.75j)

578+

self.assertEqual(ast.literal_eval('-3.25-6.75j'), -3.25-6.75j)

579+

self.assertEqual(ast.literal_eval('(3+6j)'), 3+6j)

580+

self.assertRaises(ValueError, ast.literal_eval, '-6j+3')

581+

self.assertRaises(ValueError, ast.literal_eval, '-6j+3j')

582+

self.assertRaises(ValueError, ast.literal_eval, '3+-6j')

583+

self.assertRaises(ValueError, ast.literal_eval, '3+(0+6j)')

584+

self.assertRaises(ValueError, ast.literal_eval, '-(3+6j)')

562585563586

def test_bad_integer(self):

564587

# issue13436: Bad error message with invalid numeric values

@@ -1077,11 +1100,11 @@ def test_literal_eval(self):

10771100

ast.copy_location(new_left, binop.left)

10781101

binop.left = new_left

107911021080-

new_right = ast.Constant(value=20)

1103+

new_right = ast.Constant(value=20j)

10811104

ast.copy_location(new_right, binop.right)

10821105

binop.right = new_right

108311061084-

self.assertEqual(ast.literal_eval(binop), 30)

1107+

self.assertEqual(ast.literal_eval(binop), 10+20j)

108511081086110910871110

def main():