fix(todo-form): _safe_rel保留尾部/——目录型target(如 docs/资质/)不再丢原文件名
This commit is contained in:
parent
c714a98dd1
commit
370b7d0a4b
@ -103,16 +103,21 @@ if not project_dir or not os.path.isdir(project_dir):
|
||||
|
||||
|
||||
def _safe_rel(target):
|
||||
"""校验相对路径:禁绝对路径、禁 .. 穿越。返回规整后的相对路径或 ''。"""
|
||||
"""校验相对路径:禁绝对路径、禁 .. 穿越。返回规整后的相对路径或 ''。
|
||||
|
||||
保留尾部 '/'——它是「目录 target」(保留原文件名)与「文件 target」
|
||||
(直接用 target 作路径)的区分标志,归一化时不能丢。
|
||||
"""
|
||||
t = (target or '').strip()
|
||||
if not t:
|
||||
return ''
|
||||
if t.startswith('/'):
|
||||
return ''
|
||||
is_dir = t.endswith('/')
|
||||
parts = [p for p in t.split('/') if p not in ('', '.')]
|
||||
if '..' in parts:
|
||||
return ''
|
||||
return '/'.join(parts)
|
||||
return '/'.join(parts) + ('/' if is_dir else '')
|
||||
|
||||
|
||||
uploaded = [] # [(name, rel_path)]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user