]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
add restrictions in restricted mode
authorGuido van Rossum <guido@python.org>
Tue, 10 Jan 1995 10:39:49 +0000 (10:39 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 10 Jan 1995 10:39:49 +0000 (10:39 +0000)
Objects/classobject.c
Objects/funcobject.c
Objects/methodobject.c

index 48c60d43f4eefbe7d66c583bce813f0c726ce071..f18b4fb9a5f1cb8eadaae689629fb99f1cd1a1d4 100644 (file)
@@ -116,21 +116,28 @@ class_getattr(op, name)
 {
        register object *v;
        classobject *class;
-       if (strcmp(name, "__dict__") == 0) {
-               INCREF(op->cl_dict);
-               return op->cl_dict;
-       }
-       if (strcmp(name, "__bases__") == 0) {
-               INCREF(op->cl_bases);
-               return op->cl_bases;
-       }
-       if (strcmp(name, "__name__") == 0) {
-               if (op->cl_name == NULL)
-                       v = None;
-               else
-                       v = op->cl_name;
-               INCREF(v);
-               return v;
+       if (name[0] == '_' && name[1] == '_') {
+               if (strcmp(name, "__dict__") == 0) {
+                       if (getrestricted()) {
+                               err_setstr(RuntimeError,
+                                          "class.__dict__ not accessible in restricted mode");
+                               return NULL;
+                       }
+                       INCREF(op->cl_dict);
+                       return op->cl_dict;
+               }
+               if (strcmp(name, "__bases__") == 0) {
+                       INCREF(op->cl_bases);
+                       return op->cl_bases;
+               }
+               if (strcmp(name, "__name__") == 0) {
+                       if (op->cl_name == NULL)
+                               v = None;
+                       else
+                               v = op->cl_name;
+                       INCREF(v);
+                       return v;
+               }
        }
        v = class_lookup(op, name, &class);
        if (v == NULL) {
@@ -365,6 +372,11 @@ instance_getattr1(inst, name)
        classobject *class;
        if (name[0] == '_' && name[1] == '_') {
                if (strcmp(name, "__dict__") == 0) {
+                       if (getrestricted()) {
+                               err_setstr(RuntimeError,
+                                          "instance.__dict__ not accessible in restricted mode");
+                               return NULL;
+                       }
                        INCREF(inst->in_dict);
                        return inst->in_dict;
                }
@@ -420,15 +432,6 @@ instance_getattr(inst, name)
        res = instance_getattr1(inst, name);
        if (res == NULL && (func = inst->in_class->cl_getattr) != NULL) {
                object *args;
-#if 0
-               if (name[0] == '_' && name[1] == '_') {
-                       int n = strlen(name);
-                       if (name[n-1] == '_' && name[n-2] == '_') {
-                               /* Don't mess with system attributes */
-                               return NULL;
-                       }
-               }
-#endif
                err_clear();
                args = mkvalue("(Os)", inst, name);
                if (args == NULL)
@@ -1132,6 +1135,11 @@ instancemethod_getattr(im, name)
        register instancemethodobject *im;
        char *name;
 {
+       if (name[0] != '_' && getrestricted()) {
+               err_setstr(RuntimeError,
+                          "instance-method attributes not accessible in restricted mode");
+               return NULL;
+       }
        return getmember((char *)im, instancemethod_memberlist, name);
 }
 
index 304fb37bbbde27ef6ec35d51ce0ee4a7eb039a0b..e2ba2a97d6e5749b5d1ed5d03eb94234edbf893e 100644 (file)
@@ -127,6 +127,7 @@ static struct memberlist func_memberlist[] = {
        {"func_code",   T_OBJECT,       OFF(func_code),         READONLY},
        {"func_globals",T_OBJECT,       OFF(func_globals),      READONLY},
        {"func_name",   T_OBJECT,       OFF(func_name),         READONLY},
+       {"__name__",    T_OBJECT,       OFF(func_name),         READONLY},
        {"func_argcount",T_INT,         OFF(func_argcount),     READONLY},
        {"func_argdefs",T_OBJECT,       OFF(func_argdefs),      READONLY},
        {"func_doc",    T_OBJECT,       OFF(func_doc)},
@@ -139,6 +140,11 @@ func_getattr(op, name)
        funcobject *op;
        char *name;
 {
+       if (name[0] != '_' && getrestricted()) {
+               err_setstr(RuntimeError,
+                 "function attributes not accessible in restricted mode");
+               return NULL;
+       }
        return getmember((char *)op, func_memberlist, name);
 }
 
index c33cea5cb52e36cac9d898566b033716a8b35764..61420aaa2a06cdb9bdfabf8df41aef9359678746 100644 (file)
@@ -107,7 +107,13 @@ meth_getattr(m, name)
                return None;
        }
        if (strcmp(name, "__self__") == 0) {
-               object *self = m->m_self;
+               object *self;
+               if (getrestricted()) {
+                       err_setstr(RuntimeError,
+                        "method.__self__ not accessible in restricted mode");
+                       return NULL;
+               }
+               self = m->m_self;
                if (self == NULL)
                        self = None;
                INCREF(self);