Skip to content

Commit 916ab04

Browse files
committed
Added validation checks for parameters in Windows Terminal endpoints
1 parent 2caa126 commit 916ab04

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

src/murfey/server/api/bootstrap.py

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -624,7 +624,7 @@ def get_windows_terminal_releases(request: Request):
624624

625625
# Iterate through repository pages
626626
for p in range(num_pages):
627-
url = windows_terminal_url + f"?page={p + 1}"
627+
url = f"{windows_terminal_url}?page={p + 1}"
628628
response = requests.get(url)
629629
headers = response.headers
630630
if not headers["content-type"].startswith("text/html"):
@@ -688,8 +688,12 @@ def get_windows_terminal_version_assets(
688688
Returns a list of packages for the selected version of Windows Terminal.
689689
"""
690690

691+
# Validate inputs
692+
if bool(re.match(r"^[\w\-\.]+$", version)) is False:
693+
raise HTTPException("Invalid version format")
694+
691695
# https://github.com/{owner}/{repo}/releases/expanded_assets/{version}
692-
url = windows_terminal_url + f"/expanded_assets/{version}"
696+
url = f"{windows_terminal_url}/expanded_assets/{version}"
693697

694698
response = requests.get(url)
695699
headers = response.headers
@@ -698,7 +702,11 @@ def get_windows_terminal_version_assets(
698702
text = response.text
699703

700704
# Find hyperlinks
701-
pattern = r'href="[/\w\.]+/releases/download/' + f"{version}" + r'/([\w\.\-]+)"'
705+
pattern = (
706+
r'href="[/\w\.]+/releases/download/'
707+
+ f'{quote(version, safe="")}'
708+
+ r'/([\w\.\-]+)"'
709+
)
702710
assets = re.findall(pattern, text)
703711

704712
# Construct HTML document for available assets
@@ -720,7 +728,9 @@ def get_windows_terminal_version_assets(
720728

721729
for a in range(len(assets)):
722730
asset = assets[a]
723-
hyperlink = f'<a href="{base_url}/{path}/{asset}">{asset}</a><br />'
731+
hyperlink = (
732+
f'<a href="{base_url}/{path}/{asset}">{quote(asset, safe="")}</a><br />'
733+
)
724734
link_list.append(hyperlink)
725735
hyperlinks = "\n".join(link_list)
726736

@@ -751,7 +761,14 @@ def get_windows_terminal_package_file(
751761
Returns a package from the GitHub repository.
752762
"""
753763

754-
url = windows_terminal_url + f"/download/{version}/{file_name}"
764+
# Validate version and file names
765+
if bool(re.match(r"^[\w\.\-]+$", version)) is False:
766+
raise HTTPException("Invalid version format")
767+
if bool(re.match(r"^[\w\.\-]+$", file_name)) is False:
768+
raise HTTPException("Invalid file name")
769+
770+
# https://github.com/{owner}/{repo}/releases/download/{version}/{file_name}
771+
url = f'{windows_terminal_url}/download/{quote(version, safe="")}/{quote(file_name, safe="")}'
755772
response = requests.get(url)
756773
if response.status_code == 200:
757774
return Response(

0 commit comments

Comments
 (0)