From 996ba0260209aaac0e1cd29516dc2ba7120c698b Mon Sep 17 00:00:00 2001 From: "R. David Murray" Date: Wed, 13 May 2009 17:14:11 +0000 Subject: Issue #4050: inspect.findsource/getsource now raise an IOError if the 'source' file is a binary. Patch by Brodie Rao, test by Daniel Diniz. --- Lib/inspect.py | 4 +++- Lib/test/test_inspect.py | 7 +++++++ Misc/ACKS | 2 ++ Misc/NEWS | 3 +++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Lib/inspect.py b/Lib/inspect.py index 1453f3b..3305c8d 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -523,7 +523,9 @@ def findsource(object): or code object. The source code is returned as a list of all the lines in the file and the line number indexes a line in that list. An IOError is raised if the source code cannot be retrieved.""" - file = getsourcefile(object) or getfile(object) + file = getsourcefile(object) + if not file: + raise IOError('source code not available') module = getmodule(object, file) if module: lines = linecache.getlines(file, module.__dict__) diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index 7312cac..5c41433 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -9,6 +9,9 @@ from test.test_support import TESTFN, run_unittest from test import inspect_fodder as mod from test import inspect_fodder2 as mod2 +# C module for test_findsource_binary +import time + # Functions tested in this suite: # ismodule, isclass, ismethod, isfunction, istraceback, isframe, iscode, # isbuiltin, isroutine, isgenerator, isgeneratorfunction, getmembers, @@ -329,6 +332,10 @@ class TestBuggyCases(GetSourceBase): def test_method_in_dynamic_class(self): self.assertSourceEqual(mod2.method_in_dynamic_class, 95, 97) + def test_findsource_binary(self): + self.assertRaises(IOError, inspect.getsource, time) + self.assertRaises(IOError, inspect.findsource, time) + # Helper for testing classify_class_attrs. def attrs_wo_objs(cls): return [t[:3] for t in inspect.classify_class_attrs(cls)] diff --git a/Misc/ACKS b/Misc/ACKS index 9db9f61..5cae037 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -171,6 +171,7 @@ Raghuram Devarakonda Toby Dickenson Mark Dickinson Jack Diederich +Daniel Diniz Yves Dionne Daniel Dittmar Jaromir Dolecek @@ -577,6 +578,7 @@ Eduardo P Brian Quinlan Anders Qvist Burton Radons +Brodie Rao Antti Rasinen Eric Raymond Edward K. Ream diff --git a/Misc/NEWS b/Misc/NEWS index b717729..2203621 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -293,6 +293,9 @@ Core and Builtins Library ------- +- Issue #4050: inspect.findsource/getsource now raise an IOError if the 'source' + file is a binary. Patch by Brodie Rao, tests by Daniel Diniz. + - Issue #5977: distutils build_ext.get_outputs was not taking into account the inplace option. Initial patch by kxroberto. -- cgit v0.12