From e01cc0b77355bf8b7919ee761ef931a6b92dcc0a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Paul=20H=C3=A4nsch?= Date: Fri, 7 Nov 2025 01:19:04 +0100 Subject: [PATCH] Fix pathing bugs in attachment_glob() --- tools.sh | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/tools.sh b/tools.sh index 6923b6a..e067e47 100755 --- a/tools.sh +++ b/tools.sh @@ -110,31 +110,35 @@ size_human(){ } attachment_glob(){ - local pattern="${1%/}" IFS='' + local pattern="${1}" IFS='' local glob page pagedir page="${pattern%/*}" - [ "$page" = "$pattern" ] && page=. - [ ! "$page" ] && page=/ + [ "$page" = "$pattern" ] && page="./" || page="${page}/" pattern="${pattern##*/}" [ ! "$pattern" ] && pattern="*" case $page in /*) - for glob in "$_DATA/pages/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_DATA/pages"}"; done - for glob in "$_EXEC/pages/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_EXEC/pages"}"; done + for glob in "$_DATA/pages${page}#attachments"/$pattern; + do [ -e "$glob" ] && printf '%s\n' "${glob#"$_DATA/pages"}"; done + for glob in "$_EXEC/pages${page}#attachments"/$pattern; + do [ -e "$glob" ] && printf '%s\n' "${glob#"$_EXEC/pages"}"; done ;; *) - for glob in "$_DATA/pages/$PATH_INFO/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_DATA/pages/$PATH_INFO/"}"; done - for glob in "$_EXEC/pages/$PATH_INFO/$page/#attachments"/$pattern; do printf '%s\n' "${glob#"$_EXEC/pages/$PATH_INFO/"}"; done + for glob in "$_DATA/pages/$PATH_INFO/$page#attachments"/$pattern; + do [ -e "$glob" ] && printf '%s\n' "${glob#"$_DATA/pages/$PATH_INFO/"}"; done + # FIXME: ../ cannot resolve if $PATH_INFO does not exist in $_EXEC/pages/ + # even though the resulting path would be valid (i.e. $_EXEC/pages/NONEXIST/../) + for glob in "$_EXEC/pages/$PATH_INFO/$page#attachments"/$pattern; + do [ -e "$glob" ] && printf '%s\n' "${glob#"$_EXEC/pages/$PATH_INFO/"}"; done ;; esac \ | sort -u \ | while read -r glob; do - [ -e "$glob" ] || continue pagedir="$(page_abs "${glob%%/#attachments/*}/")" [ -d "$_DATA/pages/$pagedir" -o -d "$_EXEC/pages/$pagedir" ] \ - && printf '%s\n' "${glob%%/#attachments/*}/${glob#*/#attachments/}" + && printf '%s\n' "${glob%%/#attachments/*}/${glob##*/}" done } -- 2.39.5