[UB] Another place where we were trying to put string data into

a BumpPtrAllocator. This at least now handles the case where there is no
concatentation without calling memcpy on a null pointer. It might be
interesting to handle the case where everything is empty without
round-tripping through the allocator, but it wasn't clear to me if the
pointer returned is significant in any way, so I've left it in
a conservatively more-correct state.

Again, found with UBSan.

llvm-svn: 243948
This commit is contained in:
Chandler Carruth 2015-08-04 03:53:00 +00:00
parent f0c627d5f8
commit a91ba1260a
1 changed files with 4 additions and 2 deletions

View File

@ -485,8 +485,10 @@ private:
/// are concatenated.
StringRef internString(StringRef A, StringRef B = StringRef()) {
char *Data = DebugInfoNames.Allocate<char>(A.size() + B.size());
std::memcpy(Data, A.data(), A.size());
std::memcpy(Data + A.size(), B.data(), B.size());
if (!A.empty())
std::memcpy(Data, A.data(), A.size());
if (!B.empty())
std::memcpy(Data + A.size(), B.data(), B.size());
return StringRef(Data, A.size() + B.size());
}
};