Tell MSan that memory initialized by libz is valid

llvm-svn: 180094
This commit is contained in:
Alexey Samsonov 2013-04-23 12:17:46 +00:00
parent 15aa1cd1ac
commit 0c9f1bfae5
1 changed files with 9 additions and 2 deletions

View File

@ -15,6 +15,7 @@
#include "llvm/ADT/OwningPtr.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Config/config.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MemoryBuffer.h"
#if LLVM_ENABLE_ZLIB == 1 && HAVE_ZLIB_H
@ -55,9 +56,12 @@ zlib::Status zlib::compress(StringRef InputBuffer,
Status Res = encodeZlibReturnValue(::compress2(
(Bytef *)TmpBuffer.get(), &CompressedSize,
(const Bytef *)InputBuffer.data(), InputBuffer.size(), CLevel));
if (Res == StatusOK)
if (Res == StatusOK) {
CompressedBuffer.reset(MemoryBuffer::getMemBufferCopy(
StringRef(TmpBuffer.get(), CompressedSize)));
// Tell MSan that memory initialized by zlib is valid.
__msan_unpoison(CompressedBuffer.data(), CompressedBuffer.size());
}
return Res;
}
@ -68,9 +72,12 @@ zlib::Status zlib::uncompress(StringRef InputBuffer,
Status Res = encodeZlibReturnValue(
::uncompress((Bytef *)TmpBuffer.get(), (uLongf *)&UncompressedSize,
(const Bytef *)InputBuffer.data(), InputBuffer.size()));
if (Res == StatusOK)
if (Res == StatusOK) {
UncompressedBuffer.reset(MemoryBuffer::getMemBufferCopy(
StringRef(TmpBuffer.get(), UncompressedSize)));
// Tell MSan that memory initialized by zlib is valid.
__msan_unpoison(UncompressedBuffer.data(), UncompressedBuffer.size());
}
return Res;
}