Reapply: [VFS] Add support for handling path traversals
This is originally r261551, reverted because of windows bots failing on unittests. Change the current behavior to do not handle path traversals on windows. Handle ".", ".." and "./" with trailing slashes while collecting files to be dumped into the vfs overlay directory. Include the support for symlinks into components. Given the path: /install-dir/bin/../lib/clang/3.8.0/include/altivec.h, if "bin" component is a symlink, it's not safe to use `path::remove_dots` here, and `realpath` is used to get the right answer. Since `realpath` is expensive, we only do it at collecting time (which only happens during the crash reproducer) and cache the base directory for fast lookups. Overall, this makes the input to the VFS YAML file to be canonicalized to never contain traversal components. Differential Revision: http://reviews.llvm.org/D17104 rdar://problem/24499339 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@263617 91177308-0d34-0410-b5e6-96231b3b80d8
Showing
- lib/Basic/VirtualFileSystem.cpp 64 additions, 16 deletionslib/Basic/VirtualFileSystem.cpp
- lib/Frontend/ModuleDependencyCollector.cpp 73 additions, 8 deletionslib/Frontend/ModuleDependencyCollector.cpp
- test/Modules/crash-vfs-path-symlink-component.m 72 additions, 0 deletionstest/Modules/crash-vfs-path-symlink-component.m
- test/Modules/crash-vfs-path-traversal.m 60 additions, 0 deletionstest/Modules/crash-vfs-path-traversal.m
Loading
Please register or sign in to comment