[PATCH] D48250: [sanitizer_common] Use O_TRUNC for WrOnly access mode.

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 15 20:37:23 PDT 2018


This revision was automatically updated to reflect the committed changes.
MaskRay marked an inline comment as done.
Closed by commit rL334881: [sanitizer_common] Use O_TRUNC for WrOnly access mode. (authored by MaskRay, committed by ).

Repository:
  rL LLVM

https://reviews.llvm.org/D48250

Files:
  compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc
  compiler-rt/trunk/lib/sanitizer_common/sanitizer_rtems.cc
  compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_libc_test.cc


Index: compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc
===================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_posix.cc
@@ -160,7 +160,7 @@
   int flags;
   switch (mode) {
     case RdOnly: flags = O_RDONLY; break;
-    case WrOnly: flags = O_WRONLY | O_CREAT; break;
+    case WrOnly: flags = O_WRONLY | O_CREAT | O_TRUNC; break;
     case RdWr: flags = O_RDWR | O_CREAT; break;
   }
   fd_t res = internal_open(filename, flags, 0660);
Index: compiler-rt/trunk/lib/sanitizer_common/sanitizer_rtems.cc
===================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_rtems.cc
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_rtems.cc
@@ -193,7 +193,7 @@
   int flags;
   switch (mode) {
     case RdOnly: flags = O_RDONLY; break;
-    case WrOnly: flags = O_WRONLY | O_CREAT; break;
+    case WrOnly: flags = O_WRONLY | O_CREAT | O_TRUNC; break;
     case RdWr: flags = O_RDWR | O_CREAT; break;
   }
   fd_t res = open(filename, flags, 0660);
Index: compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_libc_test.cc
===================================================================
--- compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_libc_test.cc
+++ compiler-rt/trunk/lib/sanitizer_common/tests/sanitizer_libc_test.cc
@@ -108,6 +108,12 @@
   temp_file_name(tmpfile, sizeof(tmpfile), "sanitizer_common.fileops.tmp.");
   fd_t fd = OpenFile(tmpfile, WrOnly);
   ASSERT_NE(fd, kInvalidFd);
+  ASSERT_FALSE(internal_iserror(internal_write(fd, "A", 1)));
+  CloseFile(fd);
+
+  fd = OpenFile(tmpfile, WrOnly);
+  ASSERT_NE(fd, kInvalidFd);
+  EXPECT_EQ(internal_lseek(fd, 0, SEEK_END), 0u);
   uptr bytes_written = 0;
   EXPECT_TRUE(WriteToFile(fd, str1, len1, &bytes_written));
   EXPECT_EQ(len1, bytes_written);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D48250.151602.patch
Type: text/x-patch
Size: 1919 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180616/4e253074/attachment-0001.bin>


More information about the llvm-commits mailing list