[Tarantool-patches] [PATCH 1/2] sql: add missing diag_set on failure when working with files inside SQL module
Leonid Vasiliev
lvasiliev at tarantool.org
Tue Dec 8 22:59:27 MSK 2020
From: Mergen Imeev <imeevma at gmail.com>
SQL module didn't set an error in the diagnostics area on a file
operation failure. This could lead to a crash like in #5537.
Part of #5537
---
src/box/sql/os_unix.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/box/sql/os_unix.c b/src/box/sql/os_unix.c
index b351c55..557d709 100644
--- a/src/box/sql/os_unix.c
+++ b/src/box/sql/os_unix.c
@@ -159,14 +159,17 @@ robust_open(const char *z, int f, mode_t m)
if (fd < 0) {
if (errno == EINTR)
continue;
+ diag_set(SystemError, strerror(errno));
break;
}
if (fd >= SQL_MINIMUM_FILE_DESCRIPTOR)
break;
close(fd);
fd = -1;
- if (open("/dev/null", f, m) < 0)
+ if (open("/dev/null", f, m) < 0) {
+ diag_set(SystemError, strerror(errno));
break;
+ }
}
if (fd >= 0) {
if (m != 0) {
@@ -831,8 +834,10 @@ seekAndWriteFd(int fd, /* File descriptor to write to */
rc = write(fd, pBuf, nBuf);
} while (rc < 0 && errno == EINTR);
- if (rc < 0)
+ if (rc < 0) {
+ diag_set(SystemError, strerror(errno));
*piErrno = errno;
+ }
return rc;
}
--
2.7.4
More information about the Tarantool-patches
mailing list