← Commit list

dcd27abcc

Denys Vlasenko
Denys Vlasenko
2009-10-05
FAILED Duration: 36s

Subject

unpackers: check errors from close() too

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

archival/bbunzip.c+5 -5
@@ -98,6 +98,7 @@ int FAST_FUNC bbunpack(char **argv,
status = unpacker(&info);
if (status < 0)
exitcode = 1;
+ xclose(STDOUT_FILENO); /* with error check! */
if (filename) {
char *del = new_name;
@@ -108,12 +109,11 @@ int FAST_FUNC bbunpack(char **argv,
times.actime = info.mtime;
times.modtime = info.mtime;
- /* Close first.
+ /* Note: we closed it first.
* On some systems calling utime
- * then closing resets the mtime. */
- close(STDOUT_FILENO);
- /* Ignoring errors */
- utime(new_name, &times);
+ * then closing resets the mtime
+ * back to current time. */
+ utime(new_name, &times); /* ignoring errors */
}
/* Delete _compressed_ file */
include/libbb.h+3 -0
@@ -631,6 +631,9 @@ extern void xwrite(int fd, const void *buf, size_t count) FAST_FUNC;
extern void xwrite_str(int fd, const char *str) FAST_FUNC;
extern void xopen_xwrite_close(const char* file, const char *str) FAST_FUNC;
+/* Close fd, but check for failures (some types of write errors) */
+extern void xclose(int fd) FAST_FUNC;
+
/* Reads and prints to stdout till eof, then closes FILE. Exits on error: */
extern void xprint_and_close_file(FILE *file) FAST_FUNC;
libbb/xfuncs_printf.c+6 -0
@@ -213,6 +213,12 @@ void FAST_FUNC xwrite_str(int fd, const char *str)
xwrite(fd, str, strlen(str));
}
+void FAST_FUNC xclose(int fd)
+{
+ if (close(fd))
+ bb_perror_msg_and_die("close failed");
+}
+
// Die with an error message if we can't lseek to the right spot.
off_t FAST_FUNC xlseek(int fd, off_t offset, int whence)
{