Skip to content

Instantly share code, notes, and snippets.

@dutc
Last active August 29, 2015 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dutc/9105021 to your computer and use it in GitHub Desktop.
Save dutc/9105021 to your computer and use it in GitHub Desktop.
example of triggering restricted mode by touching __builtins__ (run this in the repl)
def f(x):
print 'func_code is a restricted attribute', x.func_code
f(f) # this works
# overwrite __builtins__
old_builtins = __builtins__
new_builtins = type('module', (type(__builtins__),), {})('__builtins__')
for attr, value in ((attr, getattr(old_builtins, attr)) for attr in dir(old_builtins)):
setattr(new_builtins, attr, value)
__builtins__ = new_builtins
f(f) # this fails
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# File "<stdin>", line 2, in f
# RuntimeError: function attributes not accessible in restricted mode
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment