summaryrefslogtreecommitdiffstats
path: root/Objects/classobject.c
diff options
context:
space:
mode:
Diffstat (limited to 'Objects/classobject.c')
-rw-r--r--Objects/classobject.c56
1 files changed, 32 insertions, 24 deletions
diff --git a/Objects/classobject.c b/Objects/classobject.c
index 48c60d4..f18b4fb 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -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);
}