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

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)