]> granicus.if.org Git - clang/commit
[VFS] Add support for handling path traversals
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Mon, 22 Feb 2016 18:41:01 +0000 (18:41 +0000)
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Mon, 22 Feb 2016 18:41:01 +0000 (18:41 +0000)
commit7a49f7e7020ad7edab69a3b57e6633d34b138905
tree0cf09e9ff6e31a57ca467b3cf9ccbd1018f3348b
parent6070b7098350ea390fd0aeabde12e130f32039e9
[VFS] Add support for handling path traversals

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@261551 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Basic/VirtualFileSystem.cpp
lib/Frontend/ModuleDependencyCollector.cpp
test/Modules/crash-vfs-path-symlink-component.m [new file with mode: 0644]
test/Modules/crash-vfs-path-traversal.m [new file with mode: 0644]