touch: don't leak descriptor if fstat(2) fails

If fstat(2) fails the close(2) won't be called, which will leak the
file descriptor.

The idea was borrowed from OpenBSD, where similar patch
was applied for futimens(2).

MFC after:	1 week
This commit is contained in:
Mariusz Zaborski
2022-03-12 11:38:12 +01:00
parent 54b75edd9e
commit cb54c500d0
+9 -1
View File
@@ -177,11 +177,19 @@ main(int argc, char *argv[])
/* Create the file. */
fd = open(*argv,
O_WRONLY | O_CREAT, DEFFILEMODE);
if (fd == -1 || fstat(fd, &sb) || close(fd)) {
if (fd == -1) {
rval = 1;
warn("%s", *argv);
continue;
}
if (fstat(fd, &sb) < 0) {
warn("%s", *argv);
rval = 1;
}
if (close(fd) < 0) {
warn("%s", *argv);
rval = 1;
}
/* If using the current time, we're done. */
if (!timeset)