diff options
author | 2020-08-04 17:48:11 -0700 | |
---|---|---|
committer | 2020-08-04 17:48:52 -0700 | |
commit | 61400aabf6d6d30d09f16e91eb43894fa2b56ff7 (patch) | |
tree | df7958546137d519f81c0f9e51669043e2a36e79 | |
parent | Revert "Disabled burst_shared filter temporarily" (diff) |
Source: raise BadArgument for dynamically-created objects
Commands, cogs, etc. created via internal eval won't have a source file
associated with them, making source retrieval impossible.
Fixes #1083
Fixes BOT-7K
-rw-r--r-- | bot/cogs/source.py | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/bot/cogs/source.py b/bot/cogs/source.py index f1db745cd..89548613d 100644 --- a/bot/cogs/source.py +++ b/bot/cogs/source.py @@ -60,7 +60,11 @@ class BotSource(commands.Cog): await ctx.send(embed=embed) def get_source_link(self, source_item: SourceType) -> Tuple[str, str, Optional[int]]: - """Build GitHub link of source item, return this link, file location and first line number.""" + """ + Build GitHub link of source item, return this link, file location and first line number. + + Raise BadArgument if `source_item` is a dynamically-created object (e.g. via internal eval). + """ if isinstance(source_item, commands.HelpCommand): src = type(source_item) filename = inspect.getsourcefile(src) @@ -78,10 +82,17 @@ class BotSource(commands.Cog): filename = tags_cog._cache[source_item]["location"] else: src = type(source_item) - filename = inspect.getsourcefile(src) + try: + filename = inspect.getsourcefile(src) + except TypeError: + raise commands.BadArgument("Cannot get source for a dynamically-created object.") if not isinstance(source_item, str): - lines, first_line_no = inspect.getsourcelines(src) + try: + lines, first_line_no = inspect.getsourcelines(src) + except OSError: + raise commands.BadArgument("Cannot get source for a dynamically-created object.") + lines_extension = f"#L{first_line_no}-L{first_line_no+len(lines)-1}" else: first_line_no = None |