Skip to content

Commit

Permalink
[PathV2] In llvm::sys::fs::unique_file, make sure it doesn't fall int…
Browse files Browse the repository at this point in the history
…o an infinite loop by constantly trying

to create the parent path.

This can happen if the path is a relative filename and the current directory was removed.
Thanks to Daniel D. for the hint in fixing it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176226 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
akyrtzi committed Feb 28, 2013
1 parent d2eaf45 commit 2b9a946
Showing 1 changed file with 7 additions and 1 deletion.
8 changes: 7 additions & 1 deletion lib/Support/Unix/PathV2.inc
Original file line number Diff line number Diff line change
Expand Up @@ -417,6 +417,10 @@ retry_random_path:
RandomPath[i] = "0123456789abcdef"[sys::Process::GetRandomNumber() & 15];
}

// Make sure we don't fall into an infinite loop by constantly trying
// to create the parent path.
bool TriedToCreateParent = false;

// Try to open + create the file.
rety_open_create:
int RandomFD = ::open(RandomPath.c_str(), O_RDWR | O_CREAT | O_EXCL, mode);
Expand All @@ -427,7 +431,9 @@ rety_open_create:
goto retry_random_path;
// If path prefix doesn't exist, try to create it.
if (SavedErrno == errc::no_such_file_or_directory &&
!exists(path::parent_path(RandomPath))) {
!exists(path::parent_path(RandomPath)) &&
!TriedToCreateParent) {
TriedToCreateParent = true;
StringRef p(RandomPath);
SmallString<64> dir_to_create;
for (path::const_iterator i = path::begin(p),
Expand Down

0 comments on commit 2b9a946

Please sign in to comment.