以什么方式`fast_abs_path`"危险,但可能更快"?

Mat*_*eau 8 perl

Cwd模块文档声明这fast_abs_path是"更危险但可能更快的版本abs_path".它以什么方式危险?在什么情况下它更快?这种行为会因平台而异吗?

gee*_*aur 11

fast_abs_path调用chdir让内核解决导致你一次传递的内容的路径,而不是仔细检查每个组件并逐个构建新路径; 问题是权限可能会阻止它chdir之后返回到原始目录.(有些系统可以使用openfchdir解决这个问题,但在Perl运行的所有平台上都无法可靠地使用它.)

是否可以发生这种情况取决于您的脚本是否可以在无法直接访问的目录中执行.在类Unix系统上,当setuid包装chdir到受限权限区域然后丢弃setuid 时,就会发生这种情况.(历史上,受限制的权限位于命名的路径组件上lock;各种邮件和Usenet新闻子系统已使用它来保护其队列目录.)