From: Matthias Klose Date: Sun, 15 Aug 2004 17:16:25 +0000 (+0000) Subject: - Bug #891637, patch #1005466: fix inspect.getargs() crash on def foo((bar)). X-Git-Tag: v2.3.5c1~135 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c1a97ef731c2c48a86ad3387551ff323d7314f93;p=thirdparty%2FPython%2Fcpython.git - Bug #891637, patch #1005466: fix inspect.getargs() crash on def foo((bar)). --- diff --git a/Lib/inspect.py b/Lib/inspect.py index bc6033328f4a..87cc7f94fee8 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -621,14 +621,22 @@ def getargs(co): count.append(value) elif opname == 'STORE_FAST': stack.append(names[value]) - remain[-1] = remain[-1] - 1 - while remain[-1] == 0: - remain.pop() - size = count.pop() - stack[-size:] = [stack[-size:]] - if not remain: break + + # Special case for sublists of length 1: def foo((bar)) + # doesn't generate the UNPACK_TUPLE bytecode, so if + # `remain` is empty here, we have such a sublist. + if not remain: + stack[0] = [stack[0]] + break + else: remain[-1] = remain[-1] - 1 - if not remain: break + while remain[-1] == 0: + remain.pop() + size = count.pop() + stack[-size:] = [stack[-size:]] + if not remain: break + remain[-1] = remain[-1] - 1 + if not remain: break args[i] = stack[0] varargs = None diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index bdbec41ff458..2f79fc3f1be5 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -374,3 +374,11 @@ test(defaults is None, 'A.m defaults') # Doc/lib/libinspect.tex claims there are 11 such functions count = len(filter(lambda x:x.startswith('is'), dir(inspect))) test(count == 11, "There are %d (not 11) is* functions", count) + +def sublistOfOne((foo)): return 1 + +args, varargs, varkw, defaults = inspect.getargspec(sublistOfOne) +test(args == [['foo']], 'sublistOfOne args') +test(varargs is None, 'sublistOfOne varargs') +test(varkw is None, 'sublistOfOne varkw') +test(defaults is None, 'sublistOfOn defaults') diff --git a/Misc/NEWS b/Misc/NEWS index d47fc96f99c2..3f02e0e9225f 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -92,6 +92,8 @@ Library - Bug #934282: make pydoc.stripid() be case-insensitive. +- Bug #891637, patch #1005466: fix inspect.getargs() crash on def foo((bar)). + Build -----