镜像自地址
https://github.com/binary-husky/gpt_academic.git
已同步 2025-12-06 06:26:47 +00:00
Enhance archive extraction with error handling for tar and gzip formats
这个提交包含在:
@@ -104,17 +104,27 @@ def extract_archive(file_path, dest_dir):
|
|||||||
logger.info("Successfully extracted zip archive to {}".format(dest_dir))
|
logger.info("Successfully extracted zip archive to {}".format(dest_dir))
|
||||||
|
|
||||||
elif file_extension in [".tar", ".gz", ".bz2"]:
|
elif file_extension in [".tar", ".gz", ".bz2"]:
|
||||||
with tarfile.open(file_path, "r:*") as tarobj:
|
try:
|
||||||
# 清理提取路径,移除任何不安全的元素
|
with tarfile.open(file_path, "r:*") as tarobj:
|
||||||
for member in tarobj.getmembers():
|
# 清理提取路径,移除任何不安全的元素
|
||||||
member_path = os.path.normpath(member.name)
|
for member in tarobj.getmembers():
|
||||||
full_path = os.path.join(dest_dir, member_path)
|
member_path = os.path.normpath(member.name)
|
||||||
full_path = os.path.abspath(full_path)
|
full_path = os.path.join(dest_dir, member_path)
|
||||||
if not full_path.startswith(os.path.abspath(dest_dir) + os.sep):
|
full_path = os.path.abspath(full_path)
|
||||||
raise Exception(f"Attempted Path Traversal in {member.name}")
|
if not full_path.startswith(os.path.abspath(dest_dir) + os.sep):
|
||||||
|
raise Exception(f"Attempted Path Traversal in {member.name}")
|
||||||
|
|
||||||
tarobj.extractall(path=dest_dir)
|
tarobj.extractall(path=dest_dir)
|
||||||
logger.info("Successfully extracted tar archive to {}".format(dest_dir))
|
logger.info("Successfully extracted tar archive to {}".format(dest_dir))
|
||||||
|
except tarfile.ReadError as e:
|
||||||
|
if file_extension == ".gz":
|
||||||
|
# 一些特别奇葩的项目,是一个gz文件,里面不是tar,只有一个tex文件
|
||||||
|
import gzip
|
||||||
|
with gzip.open(file_path, 'rb') as f_in:
|
||||||
|
with open(os.path.join(dest_dir, 'main.tex'), 'wb') as f_out:
|
||||||
|
f_out.write(f_in.read())
|
||||||
|
else:
|
||||||
|
raise e
|
||||||
|
|
||||||
# 第三方库,需要预先pip install rarfile
|
# 第三方库,需要预先pip install rarfile
|
||||||
# 此外,Windows上还需要安装winrar软件,配置其Path环境变量,如"C:\Program Files\WinRAR"才可以
|
# 此外,Windows上还需要安装winrar软件,配置其Path环境变量,如"C:\Program Files\WinRAR"才可以
|
||||||
|
|||||||
在新工单中引用
屏蔽一个用户