[FIX] continuing implementation of safe_eval: fixed some evaluation contexts

bzr revid: odo@openerp.com-20100601082829-n6iqqm8f0wuscvtm
This commit is contained in:
Olivier Dony
2010-06-01 10:28:29 +02:00
parent b020dc8363
commit c3397574ff
2 changed files with 18 additions and 8 deletions
+7 -6
View File
@@ -404,7 +404,8 @@ form: module.record_id""" % (xml_id,)
def ref(str_id):
return self.id_get(cr, None, str_id)
context = eval(context)
context=eval(context, locals_dict=locals())
# domain = eval(domain) # XXX need to test this line -> uid, active_id, active_ids, ...
res = {
@@ -652,14 +653,14 @@ form: module.record_id""" % (xml_id,)
if key in brrec:
return brrec[key]
return dict.__getitem__(self2, key)
globals = d()
globals['floatEqual'] = self._assert_equals
globals['ref'] = ref
globals['_ref'] = ref
globals_dict = d()
globals_dict['floatEqual'] = self._assert_equals
globals_dict['ref'] = ref
globals_dict['_ref'] = ref
for test in rec.findall('./test'):
f_expr = test.get("expr",'').encode('utf-8')
expected_value = _eval_xml(self, test, self.pool, cr, uid, self.idref, context=context) or True
expression_value = eval(f_expr, globals)
expression_value = eval(f_expr, globals_dict, nocopy=True)
if expression_value != expected_value: # assertion failed
self.assert_report.record_assertion(False, severity)
msg = 'assertion "%s" failed!\n' \
+11 -2
View File
@@ -193,8 +193,8 @@ except ImportError:
def safe_eval(expr, globals_dict=None, locals_dict=None, mode="eval"):
"""safe_eval(expression[, globals[, locals[, mode]]]) -> value
def safe_eval(expr, globals_dict=None, locals_dict=None, mode="eval", nocopy=False):
"""safe_eval(expression[, globals[, locals[, mode[, nocopy]]]]) -> result
System-restricted Python expression evaluation
@@ -216,6 +216,14 @@ def safe_eval(expr, globals_dict=None, locals_dict=None, mode="eval"):
if globals_dict is None:
globals_dict = {}
# prevent altering the globals/locals from within the sandbox
# by taking a copy.
if not nocopy:
globals_dict = dict(globals_dict)
if locals_dict is not None:
locals_dict = dict(locals_dict)
globals_dict.update(
__builtins__ = {
'True': True,
@@ -230,6 +238,7 @@ def safe_eval(expr, globals_dict=None, locals_dict=None, mode="eval"):
'tuple': tuple,
}
)
return eval(test_expr(expr,_SAFE_OPCODES, mode=mode), globals_dict, locals_dict)