[IMP] safe_eval: do not log exceptions, when re-raising a new exception, make the stacktrace complete.
bzr revid: vmt@openerp.com-20130220102259-avee8fx2a1kpdog3
This commit is contained in:
parent
1f269d0d93
commit
0de24bf983
|
@ -106,11 +106,11 @@ def test_expr(expr, allowed_codes, mode="eval"):
|
||||||
expr = expr.strip()
|
expr = expr.strip()
|
||||||
code_obj = compile(expr, "", mode)
|
code_obj = compile(expr, "", mode)
|
||||||
except (SyntaxError, TypeError):
|
except (SyntaxError, TypeError):
|
||||||
_logger.debug('Invalid eval expression', exc_info=True)
|
|
||||||
raise
|
raise
|
||||||
except Exception:
|
except Exception, e:
|
||||||
_logger.debug('Disallowed or invalid eval expression', exc_info=True)
|
import sys
|
||||||
raise ValueError("%s is not a valid expression" % expr)
|
exc_info = sys.exc_info()
|
||||||
|
raise ValueError, '"%s" while compiling\n%s' % (str(e), expr), exc_info[2]
|
||||||
for code in _get_opcodes(code_obj):
|
for code in _get_opcodes(code_obj):
|
||||||
if code not in allowed_codes:
|
if code not in allowed_codes:
|
||||||
raise ValueError("opcode %s not allowed (%r)" % (opname[code], expr))
|
raise ValueError("opcode %s not allowed (%r)" % (opname[code], expr))
|
||||||
|
@ -237,10 +237,7 @@ def safe_eval(expr, globals_dict=None, locals_dict=None, mode="eval", nocopy=Fal
|
||||||
'set' : set
|
'set' : set
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
try:
|
c = test_expr(expr, _SAFE_OPCODES, mode=mode)
|
||||||
return eval(test_expr(expr, _SAFE_OPCODES, mode=mode), globals_dict, locals_dict)
|
return eval(c, globals_dict, locals_dict)
|
||||||
except Exception:
|
|
||||||
_logger.exception('Cannot eval %r', expr)
|
|
||||||
raise
|
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||||
|
|
Loading…
Reference in New Issue