0.167.36

Fixed

  • Symlink-проверка dst при watchdog-rollback (A-022 — P2, defence-in-depth). defaultCopyFile в internal/tray/watchdog.go проверял через os.Lstat только src (backup), а dst (путь целевого бинарника) открывался OpenFile(O_CREATE|O_WRONLY|O_TRUNC) без проверок — если dst успел стать symlink, open следовал по нему и записал backup-содержимое в произвольное место. Теперь dst тоже проверяется через os.Lstat перед open: symlink → отказ (refusing to overwrite symlink target); отсутствие dst — штатный случай создания. Выбран кросс-платформенный Lstat вместо POSIX-only O_NOFOLLOW (недоступен на Windows/darwin-сборке). Требует write-доступа к директории бинарника (что уже game-over) — мера именно «в глубину». Тесты (unix): dst=symlink → ошибка, файл за symlink не тронут; src=symlink → ошибка, dst не создаётся (регрессионный); регулярный dst перезаписывается как раньше.