From a1ee266a7c8f90d5b589d875e23f5478d4ae644a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 13 Jun 2026 23:55:15 +0000 Subject: [PATCH] Add symlink-depth guard and warning for chain traversal --- install_and_cache_pkgs.sh | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/install_and_cache_pkgs.sh b/install_and_cache_pkgs.sh index 00ac7f7..17aa9b0 100755 --- a/install_and_cache_pkgs.sh +++ b/install_and_cache_pkgs.sh @@ -106,13 +106,11 @@ for installed_package in ${installed_packages}; do get_tar_relpath "${f}" if [ -L "${f}" ]; then symlink_path="${f}" - # Guard against circular links; 40 is intentionally high for alternatives chains. + # Alternatives chains are typically short; keep a high ceiling to avoid loops. max_symlink_depth=40 - for i in $(seq 1 ${max_symlink_depth}); do - if [ ! -L "${symlink_path}" ]; then - break - fi - + symlink_depth=0 + while [ -L "${symlink_path}" ] && [ ${symlink_depth} -lt ${max_symlink_depth} ]; do + symlink_depth=$((symlink_depth + 1)) target="$(readlink "${symlink_path}")" case "${target}" in /*) @@ -135,6 +133,10 @@ for installed_package in ${installed_packages}; do break fi done + + if [ -L "${symlink_path}" ] && [ ${symlink_depth} -ge ${max_symlink_depth} ]; then + log " warning: max symlink depth ${max_symlink_depth} reached for ${f}." + fi fi fi done