[sanitizer] Close fd on ReadFromFile error
authorVitaly Buka <vitalybuka@google.com>
Tue, 8 May 2018 18:32:53 +0000 (18:32 +0000)
committerVitaly Buka <vitalybuka@google.com>
Tue, 8 May 2018 18:32:53 +0000 (18:32 +0000)
llvm-svn: 331789

compiler-rt/lib/sanitizer_common/sanitizer_file.cc

index a263a50cb9debb47bcf3c106d89711047ea0939a..941d17a408b0b10dc48d16a20e7e8f9e476380a3 100644 (file)
@@ -102,11 +102,12 @@ bool ReadFileToBuffer(const char *file_name, char **buff, uptr *buff_size,
   *read_len = 0;
   // The files we usually open are not seekable, so try different buffer sizes.
   for (uptr size = kMinFileLen; size <= max_len; size *= 2) {
-    fd_t fd = OpenFile(file_name, RdOnly, errno_p);
-    if (fd == kInvalidFd) return false;
     UnmapOrDie(*buff, *buff_size);
     *buff = (char*)MmapOrDie(size, __func__);
     *buff_size = size;
+    fd_t fd = OpenFile(file_name, RdOnly, errno_p);
+    if (fd == kInvalidFd)
+      return false;
     *read_len = 0;
     // Read up to one page at a time.
     bool reached_eof = false;
@@ -114,6 +115,7 @@ bool ReadFileToBuffer(const char *file_name, char **buff, uptr *buff_size,
       uptr just_read;
       if (!ReadFromFile(fd, *buff + *read_len, PageSize, &just_read, errno_p)) {
         UnmapOrDie(*buff, *buff_size);
+        CloseFile(fd);
         return false;
       }
       if (just_read == 0) {