@@ -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