[Python-checkins] r55683 - in python/branches/bcannon-objcap: BRANCH_NOTES secure_python.c tests/fail/dangerous_things_inaccessible.py tests/succeed/import_safe_builtin.py

brett.cannon python-checkins at python.org
Wed May 30 22:16:43 CEST 2007


Author: brett.cannon
Date: Wed May 30 22:16:42 2007
New Revision: 55683

Modified:
   python/branches/bcannon-objcap/BRANCH_NOTES
   python/branches/bcannon-objcap/secure_python.c
   python/branches/bcannon-objcap/tests/fail/dangerous_things_inaccessible.py
   python/branches/bcannon-objcap/tests/succeed/import_safe_builtin.py
Log:
Remove SystemExit from the built-in namespace.  Also block the importation of
the 'exceptions' module.

This is needed as the interpreter calls Py_Finalize() if SystemExit propagates
to the top of the call chain.  Don't want that unless finalization on the
interpreter is explicitly desired.


Modified: python/branches/bcannon-objcap/BRANCH_NOTES
==============================================================================
--- python/branches/bcannon-objcap/BRANCH_NOTES	(original)
+++ python/branches/bcannon-objcap/BRANCH_NOTES	Wed May 30 22:16:42 2007
@@ -27,12 +27,13 @@
     + Requires sys.setdefaultencoding() which is deleted by site.py .
     + reload(sys) normally adds it, but hack to do a fresh import on sys is
       preventing that from happening somehow.
+    + reload() going away in Python 3.0.
 
 
 =====
 To Do
 =====
-* Deal with exit()/SystemExit.
+Nothing.
 
 
 ==========

Modified: python/branches/bcannon-objcap/secure_python.c
==============================================================================
--- python/branches/bcannon-objcap/secure_python.c	(original)
+++ python/branches/bcannon-objcap/secure_python.c	Wed May 30 22:16:42 2007
@@ -26,11 +26,10 @@
     PyObject *hidden_modules;
     PyObject *import_module;
     PyObject *import_callable;
-    Py_ssize_t safe_builtins_count = 7;
+    Py_ssize_t safe_builtins_count = 6;
     /* All whitelisted modules should be imported in the proper test file. */
     const char *safe_builtins_names[] = {"_ast", "_codecs", "_sre",
-					  "_symtable", "_types", "errno",
-					  "exceptions"};
+					  "_symtable", "_types", "errno"};
     Py_ssize_t safe_frozen_count = 0;
     const char *safe_frozen_names[] = {};
     PyObject *safe_builtins_seq;
@@ -89,8 +88,6 @@
 	   Lose this and Python will not run.
        * __main__
 	   Current scope of execution.
-       * exceptions
-	   Safe to keep around.
        * encodings
 	   Does dynamic import of encodings which requires globals() to
 	   work; globals() fails when the module has been deleted.  Also
@@ -118,7 +115,6 @@
 	    /* Modules that *must* stay visible. */
 	    if ((strcmp(module_name, "__builtin__") == 0) ||
 			    (strcmp(module_name, "__main__") == 0) ||
-			    (strcmp(module_name, "exceptions") == 0) ||
 			    (strcmp(module_name, "encodings") == 0) ||
 			    (strcmp(module_name, "codecs") == 0) ||
 			    (strcmp(module_name, "_codecs") == 0)) {
@@ -148,6 +144,7 @@
     /* Remove dangerous built-ins. */
     PyDict_DelItemString(interp->builtins, "execfile");
     PyDict_DelItemString(interp->builtins, "open");
+    PyDict_DelItemString(interp->builtins, "SystemExit");
 
   /* Use interpreter. */
     return_val = Py_Main(argc, argv);

Modified: python/branches/bcannon-objcap/tests/fail/dangerous_things_inaccessible.py
==============================================================================
--- python/branches/bcannon-objcap/tests/fail/dangerous_things_inaccessible.py	(original)
+++ python/branches/bcannon-objcap/tests/fail/dangerous_things_inaccessible.py	Wed May 30 22:16:42 2007
@@ -8,6 +8,9 @@
 # Needed to look for 'open' and 'execfile'.
 builtin_fxn_type = type(any)
 dangerous_builtins = ('open', 'execfile')
+# Needed for SystemExit.
+exc_type = type(Exception)
+dangerous_exceptions = ('SystemExit',)
 
 def check_imported_modules(module):
     """Recursively check that the module (and the modules it imports) do not
@@ -27,6 +30,9 @@
         elif isinstance(attr, builtin_fxn_type):
             if attr_name in dangerous_builtins:
                 raise Exception
+        elif isinstance(attr, exc_type):
+            if attr_name in dangerous_exceptions:
+                raise Exception
 
 
 import __builtin__
@@ -35,9 +41,6 @@
 import __main__
 check_imported_modules(__main__)
 
-import exceptions
-check_imported_modules(exceptions)
-
 import encodings
 check_imported_modules(encodings)
 

Modified: python/branches/bcannon-objcap/tests/succeed/import_safe_builtin.py
==============================================================================
--- python/branches/bcannon-objcap/tests/succeed/import_safe_builtin.py	(original)
+++ python/branches/bcannon-objcap/tests/succeed/import_safe_builtin.py	Wed May 30 22:16:42 2007
@@ -5,4 +5,3 @@
 # Also tests that modules moved to .hidden can be imported again.
 import _types
 import errno
-import exceptions


More information about the Python-checkins mailing list