[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