aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar jesopo2018-10-17 15:02:04 +0100
committerGravatar jesopo2018-10-17 15:02:04 +0100
commit3d34896beb1d6b32ae677f1790f144a9c21c124c (patch)
treee75166618634dcafcf3a9a725cef91fb88026c2a
parentRemove additional ")"s in modules/eval_python.py (diff)
signature
Better handling of eval errors in modules/eval_python.py
-rw-r--r--modules/eval_python.py20
1 files changed, 16 insertions, 4 deletions
diff --git a/modules/eval_python.py b/modules/eval_python.py
index 86fe3db3..5fcdec4b 100644
--- a/modules/eval_python.py
+++ b/modules/eval_python.py
@@ -2,12 +2,24 @@ import html, socket
from src import ModuleManager, utils
EVAL_TEMPLATE = """
-import sys
+import StringIO, sys
+
compiled = compile(sys.stdin.read(), "code", "single")
-result = eval(compiled)
-print("")
+
+old_stdout = sys.stdout
+stdout = StringIO.StringIO()
+sys.stdout = stdout
+
+try:
+ result = eval(compiled)
+except Exception as e:
+ old_stdout.write(json.dumps({"success" False, "out": str(e)}))
+ sys.exit()
+
+stdout.write("\n")
if not result == None:
- sys.stdout.write(str(result))
+ stdout.write(str(result)+"\n")
+old_stdout.write(json.dumps({"success" True, "out": stdout.getvalue()}))
"""
EVAL_URL = "https://tpcg.tutorialspoint.com/tpcg.php"