def visitPrint(self, node, walker): """Make sure prints always have a destination If we get a print without a destination, make the default destination untrusted_output. """ node = walker.defaultVisitNode(node) if node.dest is None: node.dest = ast.Name('untrusted_output') return node
class RExpression(RestrictedPython.RCompile.RestrictedCompileMode): CodeGeneratorClass = compiler.pycodegen.ExpressionCodeGenerator def __init__(self, source, filename, mode="eval"): self.mode = mode RestrictedPython.RCompile.RestrictedCompileMode.__init__( self, source, filename) self.rm = RestrictionMutator() # The security checks are performed by a set of six functions that # must be provided by the restricted environment. _getattr_name = ast.Name("getattr") class RestrictionMutator: def __init__(self): self.errors = [] self.warnings = [] self.used_names = {} def error(self, node, info): """Records a security error discovered during compilation.""" lineno = getattr(node, 'lineno', None) if lineno is not None and lineno > 0: self.errors.append('Line %d: %s' % (lineno, info)) else: self.errors.append(info)