From: Simon Ruderich Date: Thu, 13 Jun 2013 19:19:15 +0000 (+0200) Subject: Handle invalid arguments to close()/fclose() better. X-Git-Tag: 0.1~62 X-Git-Url: https://ruderich.org/simon/gitweb/?a=commitdiff_plain;h=37cb5686de05f8989dc1080ebc70b319fbc65cdd;p=coloredstderr%2Fcoloredstderr.git Handle invalid arguments to close()/fclose() better. --- diff --git a/src/coloredstderr.c b/src/coloredstderr.c index db6cb27..b7e71e1 100644 --- a/src/coloredstderr.c +++ b/src/coloredstderr.c @@ -396,14 +396,20 @@ static int (*real_close)(int); int close(int fd) { DLSYM_FUNCTION(real_close, "close"); - close_fd(fd); + if (fd >= 0) { + close_fd(fd); + } return real_close(fd); } static int (*real_fclose)(FILE *); int fclose(FILE *fp) { + int fd; + DLSYM_FUNCTION(real_fclose, "fclose"); - close_fd(fileno(fp)); + if (fp != NULL && (fd = fileno(fp)) >= 0) { + close_fd(fd); + } return real_fclose(fp); } diff --git a/tests/example.c b/tests/example.c index 0fee973..b1d42e3 100644 --- a/tests/example.c +++ b/tests/example.c @@ -56,5 +56,13 @@ int main(int argc, char **argv unused) { putc_unlocked('x', stderr); putc_unlocked('\n', stdout); + /* Test invalid stuff. */ + close(-42); + close(-4711); + /* Can't test this, results in a segfault with the "normal" fclose(). */ + /*fclose(NULL);*/ + dup(-12); + dup2(12, -42); + return EXIT_SUCCESS; }