do not use shell true instead

This commit is contained in:
Concedo 2025-04-28 14:26:55 +08:00
parent ca281bd5ba
commit a9bc1a2ee2

View file

@ -3649,7 +3649,12 @@ def zenity(filetypes=None, initialdir="", initialfile="", **kwargs) -> Tuple[int
def zenity_sanity_check(zenity_bin): #make sure zenity is sane def zenity_sanity_check(zenity_bin): #make sure zenity is sane
try: # Run `zenity --help` and pipe to grep try: # Run `zenity --help` and pipe to grep
result = subprocess.run(f"{zenity_bin} --help", shell=True, capture_output=True, text=True, encoding='utf-8', timeout=10) sc_clean_env = os.environ.copy()
sc_clean_env.pop("LD_LIBRARY_PATH", None)
sc_clean_env["PATH"] = "/usr/bin:/bin"
scargs = ['/usr/bin/env', zenity_bin, '--help']
result = subprocess.run(scargs, env=sc_clean_env, capture_output=True, text=True, encoding="utf-8", timeout=10)
if result.returncode == 0 and "Usage" in result.stdout: if result.returncode == 0 and "Usage" in result.stdout:
return True return True
else: else:
@ -5357,18 +5362,20 @@ def setuptunnel(global_memory, has_sd):
tunneloutput = "" tunneloutput = ""
tunnelrawlog = "" tunnelrawlog = ""
time.sleep(0.2) time.sleep(0.2)
tunnelbinary = ""
if os.name == 'nt': if os.name == 'nt':
print("Starting Cloudflare Tunnel for Windows, please wait...", flush=True) print("Starting Cloudflare Tunnel for Windows, please wait...", flush=True)
tunnelproc = subprocess.Popen(f"cloudflared.exe tunnel --url {httpsaffix}://localhost:{args.port}{ssladd}", text=True, encoding='utf-8', shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.PIPE) tunnelbinary = "cloudflared.exe"
elif sys.platform=="darwin": elif sys.platform=="darwin":
print("Starting Cloudflare Tunnel for MacOS, please wait...", flush=True) print("Starting Cloudflare Tunnel for MacOS, please wait...", flush=True)
tunnelproc = subprocess.Popen(f"./cloudflared tunnel --url {httpsaffix}://localhost:{args.port}{ssladd}", text=True, encoding='utf-8', shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.PIPE) tunnelbinary = "./cloudflared"
elif sys.platform == "linux" and platform.machine().lower() == "aarch64": elif sys.platform == "linux" and platform.machine().lower() == "aarch64":
print("Starting Cloudflare Tunnel for ARM64 Linux, please wait...", flush=True) print("Starting Cloudflare Tunnel for ARM64 Linux, please wait...", flush=True)
tunnelproc = subprocess.Popen(f"./cloudflared-linux-arm64 tunnel --url {httpsaffix}://localhost:{args.port}{ssladd}", text=True, encoding='utf-8', shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.PIPE) tunnelbinary = "./cloudflared-linux-arm64"
else: else:
print("Starting Cloudflare Tunnel for Linux, please wait...", flush=True) print("Starting Cloudflare Tunnel for Linux, please wait...", flush=True)
tunnelproc = subprocess.Popen(f"./cloudflared-linux-amd64 tunnel --url {httpsaffix}://localhost:{args.port}{ssladd}", text=True, encoding='utf-8', shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.PIPE) tunnelbinary = "./cloudflared-linux-amd64"
tunnelproc = subprocess.Popen(f"{tunnelbinary} tunnel --url {httpsaffix}://localhost:{args.port}{ssladd}", text=True, encoding='utf-8', shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.PIPE)
time.sleep(10) time.sleep(10)
def tunnel_reader(): def tunnel_reader():
nonlocal tunnelproc,tunneloutput,tunnelrawlog nonlocal tunnelproc,tunneloutput,tunnelrawlog
@ -5608,30 +5615,26 @@ def downloader_internal(input_url, output_filename, capture_output, min_file_siz
try: try:
if shutil.which("aria2c") is not None: if shutil.which("aria2c") is not None:
rc = subprocess.run( rc = subprocess.run([
f"aria2c -x 16 -s 16 --summary-interval=30 --console-log-level=error --log-level=error --download-result=default --allow-overwrite=true --file-allocation=none -o {output_filename} {input_url}", "aria2c", "-x", "16", "-s", "16", "--summary-interval=30", "--console-log-level=error", "--log-level=error",
shell=True, capture_output=capture_output, text=True, check=True, encoding='utf-8' "--download-result=default", "--allow-overwrite=true", "--file-allocation=none", "-o", output_filename, input_url
) ], capture_output=capture_output, text=True, check=True, encoding='utf-8')
dl_success = (rc.returncode == 0 and os.path.exists(output_filename) and os.path.getsize(output_filename) > min_file_size) dl_success = (rc.returncode == 0 and os.path.exists(output_filename) and os.path.getsize(output_filename) > min_file_size)
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
print(f"aria2c failed: {e}") print(f"aria2c failed: {e}")
try: try:
if not dl_success and shutil.which("curl") is not None: if not dl_success and shutil.which("curl") is not None:
rc = subprocess.run( rc = subprocess.run(["curl", "-fLo", output_filename, input_url],
f"curl -fLo {output_filename} {input_url}", capture_output=capture_output, text=True, check=True, encoding="utf-8")
shell=True, capture_output=capture_output, text=True, check=True, encoding='utf-8'
)
dl_success = (rc.returncode == 0 and os.path.exists(output_filename) and os.path.getsize(output_filename) > min_file_size) dl_success = (rc.returncode == 0 and os.path.exists(output_filename) and os.path.getsize(output_filename) > min_file_size)
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
print(f"curl failed: {e}") print(f"curl failed: {e}")
try: try:
if not dl_success and shutil.which("wget") is not None: if not dl_success and shutil.which("wget") is not None:
rc = subprocess.run( rc = subprocess.run(["wget", "-O", output_filename, input_url],
f"wget -O {output_filename} {input_url}", capture_output=capture_output, text=True, check=True, encoding="utf-8")
shell=True, capture_output=capture_output, text=True, check=True, encoding='utf-8'
)
dl_success = (rc.returncode == 0 and os.path.exists(output_filename) and os.path.getsize(output_filename) > min_file_size) dl_success = (rc.returncode == 0 and os.path.exists(output_filename) and os.path.getsize(output_filename) > min_file_size)
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
print(f"wget failed: {e}") print(f"wget failed: {e}")