JDevlieghere created this revision. JDevlieghere added a reviewer: teemperor. JDevlieghere requested review of this revision.
I was playing around with changing the $HOME directory and when I provided a non-existing path LLDB would crash. I traced it down to the TildeExpressionResolver which would return an empty string when expansion fails, which in turn would be converted to the current working directory when calling MakeAbsolute. https://reviews.llvm.org/D92513 Files: lldb/source/Utility/TildeExpressionResolver.cpp Index: lldb/source/Utility/TildeExpressionResolver.cpp =================================================================== --- lldb/source/Utility/TildeExpressionResolver.cpp +++ lldb/source/Utility/TildeExpressionResolver.cpp @@ -73,11 +73,15 @@ #endif } +static void Assign(llvm::StringRef s, llvm::SmallVectorImpl<char> &v) { + v.clear(); + v.append(s.begin(), s.end()); +} + bool TildeExpressionResolver::ResolveFullPath( StringRef Expr, llvm::SmallVectorImpl<char> &Output) { - Output.clear(); if (!Expr.startswith("~")) { - Output.append(Expr.begin(), Expr.end()); + Assign(Expr, Output); return false; } @@ -85,8 +89,10 @@ StringRef Left = Expr.take_until([](char c) { return path::is_separator(c); }); - if (!ResolveExact(Left, Output)) + if (!ResolveExact(Left, Output)) { + Assign(Expr, Output); return false; + } Output.append(Expr.begin() + Left.size(), Expr.end()); return true;
Index: lldb/source/Utility/TildeExpressionResolver.cpp =================================================================== --- lldb/source/Utility/TildeExpressionResolver.cpp +++ lldb/source/Utility/TildeExpressionResolver.cpp @@ -73,11 +73,15 @@ #endif } +static void Assign(llvm::StringRef s, llvm::SmallVectorImpl<char> &v) { + v.clear(); + v.append(s.begin(), s.end()); +} + bool TildeExpressionResolver::ResolveFullPath( StringRef Expr, llvm::SmallVectorImpl<char> &Output) { - Output.clear(); if (!Expr.startswith("~")) { - Output.append(Expr.begin(), Expr.end()); + Assign(Expr, Output); return false; } @@ -85,8 +89,10 @@ StringRef Left = Expr.take_until([](char c) { return path::is_separator(c); }); - if (!ResolveExact(Left, Output)) + if (!ResolveExact(Left, Output)) { + Assign(Expr, Output); return false; + } Output.append(Expr.begin() + Left.size(), Expr.end()); return true;
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits