[llvm] 6b618a6 - [llvm] fix zlib buffer truncate edge cases and fix nits in tests
Cole Kissane via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 13 15:08:45 PDT 2022
Author: Cole Kissane
Date: 2022-07-13T15:08:41-07:00
New Revision: 6b618a620f0b964f78c176a9dc94bcc35bf0db68
URL: https://github.com/llvm/llvm-project/commit/6b618a620f0b964f78c176a9dc94bcc35bf0db68
DIFF: https://github.com/llvm/llvm-project/commit/6b618a620f0b964f78c176a9dc94bcc35bf0db68.diff
LOG: [llvm] fix zlib buffer truncate edge cases and fix nits in tests
- add check before truncating (un)compressed data buffer if the buffer is already a perfect length, to avoid triggering truncate assertion in edge case.
- explictly coerce LLVM_ENABLE_ZLIB to a 0 or 1 value in OFF case, to match current ON, FORCE_ON behavior.
- fix code style nits in zlib tests
Reviewed By: phosek
Differential Revision: https://reviews.llvm.org/D129698
Added:
Modified:
llvm/cmake/config-ix.cmake
llvm/lib/Support/Compression.cpp
llvm/unittests/Support/CompressionTest.cpp
Removed:
################################################################################
diff --git a/llvm/cmake/config-ix.cmake b/llvm/cmake/config-ix.cmake
index d75d2f8421a9e..1d6743d9f4603 100644
--- a/llvm/cmake/config-ix.cmake
+++ b/llvm/cmake/config-ix.cmake
@@ -134,6 +134,8 @@ if(LLVM_ENABLE_ZLIB)
endif()
endif()
set(LLVM_ENABLE_ZLIB "${HAVE_ZLIB}")
+else()
+ set(LLVM_ENABLE_ZLIB 0)
endif()
if(LLVM_ENABLE_LIBXML2)
diff --git a/llvm/lib/Support/Compression.cpp b/llvm/lib/Support/Compression.cpp
index 00f88a3aad314..eda67c54d35dd 100644
--- a/llvm/lib/Support/Compression.cpp
+++ b/llvm/lib/Support/Compression.cpp
@@ -57,7 +57,8 @@ void zlib::compress(StringRef InputBuffer,
// Tell MemorySanitizer that zlib output buffer is fully initialized.
// This avoids a false report when running LLVM with uninstrumented ZLib.
__msan_unpoison(CompressedBuffer.data(), CompressedSize);
- CompressedBuffer.truncate(CompressedSize);
+ if (CompressedSize < CompressedBuffer.size())
+ CompressedBuffer.truncate(CompressedSize);
}
Error zlib::uncompress(StringRef InputBuffer, char *UncompressedBuffer,
@@ -79,7 +80,8 @@ Error zlib::uncompress(StringRef InputBuffer,
UncompressedBuffer.resize_for_overwrite(UncompressedSize);
Error E = zlib::uncompress(InputBuffer, UncompressedBuffer.data(),
UncompressedSize);
- UncompressedBuffer.truncate(UncompressedSize);
+ if (UncompressedSize < UncompressedBuffer.size())
+ UncompressedBuffer.truncate(UncompressedSize);
return E;
}
diff --git a/llvm/unittests/Support/CompressionTest.cpp b/llvm/unittests/Support/CompressionTest.cpp
index 777ec00f9efd4..ee0f58b0f4923 100644
--- a/llvm/unittests/Support/CompressionTest.cpp
+++ b/llvm/unittests/Support/CompressionTest.cpp
@@ -23,11 +23,9 @@ using namespace llvm::compression;
namespace {
#if LLVM_ENABLE_ZLIB
-
-void TestZlibCompression(StringRef Input, int Level) {
+static void testZlibCompression(StringRef Input, int Level) {
SmallString<32> Compressed;
SmallString<32> Uncompressed;
-
zlib::compress(Input, Compressed, Level);
// Check that uncompressed buffer is the same as original.
@@ -43,26 +41,24 @@ void TestZlibCompression(StringRef Input, int Level) {
}
TEST(CompressionTest, Zlib) {
- TestZlibCompression("", zlib::DefaultCompression);
+ testZlibCompression("", zlib::DefaultCompression);
- TestZlibCompression("hello, world!", zlib::NoCompression);
- TestZlibCompression("hello, world!", zlib::BestSizeCompression);
- TestZlibCompression("hello, world!", zlib::BestSpeedCompression);
- TestZlibCompression("hello, world!", zlib::DefaultCompression);
+ testZlibCompression("hello, world!", zlib::NoCompression);
+ testZlibCompression("hello, world!", zlib::BestSizeCompression);
+ testZlibCompression("hello, world!", zlib::BestSpeedCompression);
+ testZlibCompression("hello, world!", zlib::DefaultCompression);
const size_t kSize = 1024;
char BinaryData[kSize];
- for (size_t i = 0; i < kSize; ++i) {
+ for (size_t i = 0; i < kSize; ++i)
BinaryData[i] = i & 255;
- }
StringRef BinaryDataStr(BinaryData, kSize);
- TestZlibCompression(BinaryDataStr, zlib::NoCompression);
- TestZlibCompression(BinaryDataStr, zlib::BestSizeCompression);
- TestZlibCompression(BinaryDataStr, zlib::BestSpeedCompression);
- TestZlibCompression(BinaryDataStr, zlib::DefaultCompression);
+ testZlibCompression(BinaryDataStr, zlib::NoCompression);
+ testZlibCompression(BinaryDataStr, zlib::BestSizeCompression);
+ testZlibCompression(BinaryDataStr, zlib::BestSpeedCompression);
+ testZlibCompression(BinaryDataStr, zlib::DefaultCompression);
}
-
#endif
}
More information about the llvm-commits
mailing list