From dc8a108a36a55b480e302c556c773a2de17ec76a Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Sun, 20 Oct 1991 20:11:03 +0000 Subject: [PATCH] Protect dir() against non-directory __dict__ attributes. --- Python/bltinmodule.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 01cd5fac339..8fac03c5988 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -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; }