[compiler-rt] r226279 - [sanitizer] Additional error checking.

Evgeniy Stepanov eugeni.stepanov at gmail.com
Fri Jan 16 07:25:16 PST 2015


Author: eugenis
Date: Fri Jan 16 09:25:16 2015
New Revision: 226279

URL: http://llvm.org/viewvc/llvm-project?rev=226279&view=rev
Log:
[sanitizer] Additional error checking.

Modified:
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc?rev=226279&r1=226278&r2=226279&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc Fri Jan 16 09:25:16 2015
@@ -131,8 +131,8 @@ void NORETURN CheckFailed(const char *fi
   Die();
 }
 
-uptr ReadFileToBuffer(const char *file_name, char **buff,
-                      uptr *buff_size, uptr max_len) {
+uptr ReadFileToBuffer(const char *file_name, char **buff, uptr *buff_size,
+                      uptr max_len, int *errno_p) {
   uptr PageSize = GetPageSizeCached();
   uptr kMinFileLen = PageSize;
   uptr read_len = 0;
@@ -141,7 +141,7 @@ uptr ReadFileToBuffer(const char *file_n
   // The files we usually open are not seekable, so try different buffer sizes.
   for (uptr size = kMinFileLen; size <= max_len; size *= 2) {
     uptr openrv = OpenFile(file_name, /*write*/ false);
-    if (internal_iserror(openrv)) return 0;
+    if (internal_iserror(openrv, errno_p)) return 0;
     fd_t fd = openrv;
     UnmapOrDie(*buff, *buff_size);
     *buff = (char*)MmapOrDie(size, __func__);
@@ -151,6 +151,10 @@ uptr ReadFileToBuffer(const char *file_n
     bool reached_eof = false;
     while (read_len + PageSize <= size) {
       uptr just_read = internal_read(fd, *buff + read_len, PageSize);
+      if (internal_iserror(just_read, errno_p)) {
+        UnmapOrDie(*buff, *buff_size);
+        return 0;
+      }
       if (just_read == 0) {
         reached_eof = true;
         break;

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h?rev=226279&r1=226278&r2=226279&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.h Fri Jan 16 09:25:16 2015
@@ -180,8 +180,8 @@ uptr OpenFile(const char *filename, bool
 // The resulting buffer is mmaped and stored in '*buff'.
 // The size of the mmaped region is stored in '*buff_size',
 // Returns the number of read bytes or 0 if file can not be opened.
-uptr ReadFileToBuffer(const char *file_name, char **buff,
-                      uptr *buff_size, uptr max_len);
+uptr ReadFileToBuffer(const char *file_name, char **buff, uptr *buff_size,
+                      uptr max_len, int *errno_p = nullptr);
 // Maps given file to virtual memory, and returns pointer to it
 // (or NULL if the mapping failes). Stores the size of mmaped region
 // in '*buff_size'.

Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc?rev=226279&r1=226278&r2=226279&view=diff
==============================================================================
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc (original)
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_flags.cc Fri Jan 16 09:25:16 2015
@@ -54,10 +54,11 @@ class FlagHandlerInclude : public FlagHa
   bool Parse(const char *value) {
     char *data;
     uptr data_mapped_size;
+    int err;
     uptr len =
-        ReadFileToBuffer(value, &data, &data_mapped_size, kMaxIncludeSize);
+      ReadFileToBuffer(value, &data, &data_mapped_size, kMaxIncludeSize, &err);
     if (!len) {
-      Printf("Failed to read options from '%s'\n", value);
+      Printf("Failed to read options from '%s': error %d\n", value, err);
       return false;
     }
     parser_->ParseString(data);





More information about the llvm-commits mailing list