summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/sanitizer_common/tests/sanitizer_libc_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'compiler-rt/lib/sanitizer_common/tests/sanitizer_libc_test.cc')
-rw-r--r--compiler-rt/lib/sanitizer_common/tests/sanitizer_libc_test.cc63
1 files changed, 61 insertions, 2 deletions
diff --git a/compiler-rt/lib/sanitizer_common/tests/sanitizer_libc_test.cc b/compiler-rt/lib/sanitizer_common/tests/sanitizer_libc_test.cc
index a73c65a510c..1a9add857ba 100644
--- a/compiler-rt/lib/sanitizer_common/tests/sanitizer_libc_test.cc
+++ b/compiler-rt/lib/sanitizer_common/tests/sanitizer_libc_test.cc
@@ -9,6 +9,7 @@
// Tests for sanitizer_libc.h.
//===----------------------------------------------------------------------===//
#include <algorithm>
+#include <fstream>
#include "sanitizer_common/sanitizer_common.h"
#include "sanitizer_common/sanitizer_file.h"
@@ -82,8 +83,8 @@ static void temp_file_name(char *buf, size_t bufsize, const char *prefix) {
// on Android already.
tmpdir = GetEnv("EXTERNAL_STORAGE");
#endif
- u32 uid = GetUid();
- internal_snprintf(buf, bufsize, "%s/%s%d", tmpdir, prefix, uid);
+ internal_snprintf(buf, bufsize, "%s/%sXXXXXX", tmpdir, prefix);
+ ASSERT_TRUE(mktemp(buf));
#endif
}
@@ -151,6 +152,64 @@ TEST(SanitizerCommon, FileOps) {
#endif
}
+class SanitizerCommonFileTest : public ::testing::TestWithParam<uptr> {
+ void SetUp() override {
+ data_.resize(GetParam());
+ std::generate(data_.begin(), data_.end(), [] {
+ return rand() % 256; // NOLINT
+ });
+
+ temp_file_name(file_name_, sizeof(file_name_),
+ "sanitizer_common.ReadFile.tmp.");
+
+ std::ofstream f(file_name_, std::ios::out | std::ios::binary);
+ if (!data_.empty())
+ f.write(data_.data(), data_.size());
+ }
+
+ void TearDown() override { internal_unlink(file_name_); }
+
+ protected:
+ char file_name_[256];
+ std::vector<char> data_;
+};
+
+TEST_P(SanitizerCommonFileTest, ReadFileToBuffer) {
+ char *buff;
+ uptr size;
+ uptr len;
+ EXPECT_TRUE(ReadFileToBuffer(file_name_, &buff, &len, &size));
+ EXPECT_EQ(data_, std::vector<char>(buff, buff + size));
+ UnmapOrDie(buff, len);
+}
+
+TEST_P(SanitizerCommonFileTest, ReadFileToBufferHalf) {
+ char *buff;
+ uptr size;
+ uptr len;
+ data_.resize(data_.size() / 2);
+ EXPECT_TRUE(ReadFileToBuffer(file_name_, &buff, &len, &size, data_.size()));
+ EXPECT_EQ(data_, std::vector<char>(buff, buff + size));
+ UnmapOrDie(buff, len);
+}
+
+TEST_P(SanitizerCommonFileTest, ReadFileToVector) {
+ InternalMmapVector<char> buff;
+ EXPECT_TRUE(ReadFileToVector(file_name_, &buff));
+ EXPECT_EQ(data_, std::vector<char>(buff.begin(), buff.end()));
+}
+
+TEST_P(SanitizerCommonFileTest, ReadFileToVectorHalf) {
+ InternalMmapVector<char> buff;
+ data_.resize(data_.size() / 2);
+ EXPECT_TRUE(ReadFileToVector(file_name_, &buff, data_.size()));
+ EXPECT_EQ(data_, std::vector<char>(buff.begin(), buff.end()));
+}
+
+INSTANTIATE_TEST_CASE_P(FileSizes, SanitizerCommonFileTest,
+ ::testing::Values(0, 1, 7, 13, 32, 4096, 4097, 1048575,
+ 1048576, 1048577));
+
static const size_t kStrlcpyBufSize = 8;
void test_internal_strlcpy(char *dbuf, const char *sbuf) {
uptr retval = 0;
OpenPOWER on IntegriCloud