Protect dir() against non-directory __dict__ attributes.

This commit is contained in:
Guido van Rossum 1991-10-20 20:11:03 +00:00
parent c0aab89d96
commit dc8a108a36
1 changed files with 14 additions and 7 deletions

View File

@ -78,20 +78,27 @@ builtin_dir(self, v)
object *d;
if (v == NULL) {
d = getlocals();
INCREF(d);
}
else {
if (!is_moduleobject(v)) {
d = getattr(v, "__dict__");
if (d == NULL) {
err_setstr(TypeError,
"dir() argument must be module or absent");
"dir() argument has no variable attributes");
return NULL;
}
d = getmoduledict(v);
}
v = getdictkeys(d);
if (sortlist(v) != 0) {
DECREF(v);
v = NULL;
if (!is_dictobject(d)) { /* Assume it is None */
v = newlistobject(0);
}
else {
v = getdictkeys(d);
if (sortlist(v) != 0) {
DECREF(v);
v = NULL;
}
}
DECREF(d);
return v;
}