From 9b60816ebd0dbbc358ddb8f97fda68c23d795140 Mon Sep 17 00:00:00 2001 From: Flame442 <34169552+Flame442@users.noreply.github.com> Date: Fri, 4 Oct 2019 22:19:00 -0400 Subject: [PATCH] [Downloader] Catch OSErrors from invalid repo names (#3029) * [Downloader] Ensure repo names only contain the characters stated * Create 2827.bugfix.rst * [Downloader] Catch OSErrors from invalid filenames * Update 2827.bugfix.rst * Style * do the thing again * Update 2827.bugfix.rst --- changelog.d/downloader/2827.bugfix.rst | 1 + redbot/cogs/downloader/downloader.py | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 changelog.d/downloader/2827.bugfix.rst diff --git a/changelog.d/downloader/2827.bugfix.rst b/changelog.d/downloader/2827.bugfix.rst new file mode 100644 index 00000000000..98c6b940d34 --- /dev/null +++ b/changelog.d/downloader/2827.bugfix.rst @@ -0,0 +1 @@ +Repo names can now only contain the characters listed in the help text (A-Z, 0-9, underscores, and hyphens). diff --git a/redbot/cogs/downloader/downloader.py b/redbot/cogs/downloader/downloader.py index b59cb4be2c0..a7f85074c68 100644 --- a/redbot/cogs/downloader/downloader.py +++ b/redbot/cogs/downloader/downloader.py @@ -1,6 +1,7 @@ import asyncio import contextlib import os +import re import shutil import sys from pathlib import Path @@ -222,12 +223,17 @@ async def repo(self, ctx): async def _repo_add(self, ctx, name: str, repo_url: str, branch: str = None): """Add a new repo. - The name can only contain characters A-z, numbers and underscores. + Repo names can only contain characters A-z, numbers, underscores, and hyphens. The branch will be the default branch if not specified. """ agreed = await do_install_agreement(ctx) if not agreed: return + if re.match("^[a-zA-Z0-9_\-]*$", name) is None: + await ctx.send( + _("Repo names can only contain characters A-z, numbers, underscores, and hyphens.") + ) + return try: # noinspection PyTypeChecker repo = await self._repo_manager.add_repo(name=name, url=repo_url, branch=branch) @@ -241,6 +247,12 @@ async def _repo_add(self, ctx, name: str, repo_url: str, branch: str = None): branch, exc_info=err, ) + except OSError: + await ctx.send( + _( + "Something went wrong trying to add that repo. Your repo name might have an invalid character." + ) + ) else: await ctx.send(_("Repo `{name}` successfully added.").format(name=name)) if repo.install_msg is not None: