1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
from RestrictedPython import compile_restricted_exec
from tests.helper import restricted_exec
lambda_err_msg = 'Line 1: "_bad" is an invalid variable ' \
'name because it starts with "_"'
def test_RestrictingNodeTransformer__visit_Lambda__1():
"""It prevents arguments starting with `_`."""
result = compile_restricted_exec("lambda _bad: None")
assert result.errors == (lambda_err_msg,)
def test_RestrictingNodeTransformer__visit_Lambda__2():
"""It prevents keyword arguments starting with `_`."""
result = compile_restricted_exec("lambda _bad=1: None")
assert result.errors == (lambda_err_msg,)
def test_RestrictingNodeTransformer__visit_Lambda__3():
"""It prevents * arguments starting with `_`."""
result = compile_restricted_exec("lambda *_bad: None")
assert result.errors == (lambda_err_msg,)
def test_RestrictingNodeTransformer__visit_Lambda__4():
"""It prevents ** arguments starting with `_`."""
result = compile_restricted_exec("lambda **_bad: None")
assert result.errors == (lambda_err_msg,)
def test_RestrictingNodeTransformer__visit_Lambda__7():
"""It prevents arguments starting with `_` together with a single `*`."""
result = compile_restricted_exec("lambda good, *, _bad: None")
assert result.errors == (lambda_err_msg,)
BAD_ARG_IN_LAMBDA = """\
def check_getattr_in_lambda(arg=lambda _bad=(lambda ob, name: name): _bad2):
42
"""
def test_RestrictingNodeTransformer__visit_Lambda__8():
"""It prevents arguments starting with `_` in weird lambdas."""
result = compile_restricted_exec(BAD_ARG_IN_LAMBDA)
assert lambda_err_msg in result.errors
LAMBDA_FUNC_1 = """
g = lambda x: x ** 2
"""
def test_RestrictingNodeTransformer__visit_Lambda__10():
"""Simple lambda functions are allowed."""
restricted_globals = dict(
g=None,
)
restricted_exec(LAMBDA_FUNC_1, restricted_globals)
assert 4 == restricted_globals['g'](2)
|