diff options
author | Marcus Arendt <[email protected]> | 2014-06-04 11:50:01 +0200 |
---|---|---|
committer | Marcus Arendt <[email protected]> | 2014-06-04 11:50:01 +0200 |
commit | 596f214fc0275df8b19a8b36bb7b71e6affc6bd5 (patch) | |
tree | 0c916480087a992e45341da138443013c73cf321 | |
parent | d0893c4c5532116d5b5cb360b5ed3861fb7b25a1 (diff) | |
parent | 78540afe8d4a15fe3d6c42208b82bde546e4c0c8 (diff) | |
download | otp-596f214fc0275df8b19a8b36bb7b71e6affc6bd5.tar.gz otp-596f214fc0275df8b19a8b36bb7b71e6affc6bd5.tar.bz2 otp-596f214fc0275df8b19a8b36bb7b71e6affc6bd5.zip |
Merge branch 'mikpe/openfile-dont-use-undefined-statbuf' into maint
* mikpe/openfile-dont-use-undefined-statbuf:
Fix efile_openfile() to handle stat() failure
-rw-r--r-- | erts/emulator/drivers/unix/unix_efile.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/erts/emulator/drivers/unix/unix_efile.c b/erts/emulator/drivers/unix/unix_efile.c index 42f41c5f3d..878beb055b 100644 --- a/erts/emulator/drivers/unix/unix_efile.c +++ b/erts/emulator/drivers/unix/unix_efile.c @@ -360,7 +360,12 @@ efile_openfile(Efile_error* errInfo, /* Where to return error codes. */ int fd; int mode; /* Open mode. */ - if (stat(name, &statbuf) >= 0 && !ISREG(statbuf)) { + if (stat(name, &statbuf) < 0) { + /* statbuf is undefined: if the caller depends on it, + i.e. invoke_read_file(), fail the call immediately */ + if (pSize && flags == EFILE_MODE_READ) + return check_error(-1, errInfo); + } else if (!ISREG(statbuf)) { /* * For UNIX only, here is some ugly code to allow * /dev/null to be opened as a file. |