From 0c773ff340fd3dfe466c85b7b7257d8c5ab34b6d Mon Sep 17 00:00:00 2001 From: mlauter Date: Wed, 13 Aug 2014 15:09:46 -0400 Subject: [PATCH 1/2] add test for #347 (safe eval syntax error) --- bpython/test/test_autocomplete.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bpython/test/test_autocomplete.py b/bpython/test/test_autocomplete.py index cbe4b389b..f6fdba3b4 100644 --- a/bpython/test/test_autocomplete.py +++ b/bpython/test/test_autocomplete.py @@ -34,6 +34,12 @@ def test_cw(self): self.assertEqual(self.repl.cw(), 'datetime') """ +class TestSafeEval(unittest.TestCase): + def test_catches_syntax_error(self): + try: + autocomplete.safe_eval('1re',{}) + except: + self.fail('safe_eval raises an error') # make some fake files? Dependency inject? mock? class TestFilenameCompletion(unittest.TestCase): From ce4ab58818cb211bac7324f9a394586832703a42 Mon Sep 17 00:00:00 2001 From: mlauter Date: Wed, 13 Aug 2014 15:10:33 -0400 Subject: [PATCH 2/2] fix #347 --- bpython/autocomplete.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bpython/autocomplete.py b/bpython/autocomplete.py index 34bea9fcc..110c0d762 100644 --- a/bpython/autocomplete.py +++ b/bpython/autocomplete.py @@ -342,7 +342,7 @@ def safe_eval(expr, namespace): try: obj = eval(expr, namespace) return obj - except (NameError, AttributeError) as e: + except (NameError, AttributeError, SyntaxError) as e: # If debugging safe_eval, raise this! # raise e return SafeEvalFailed