Handle invalid arguments to close()/fclose() better.

This commit is contained in:
Simon Ruderich
2013-06-13 21:19:15 +02:00
parent 7adfbfd2cf
commit 37cb5686de
2 changed files with 16 additions and 2 deletions

View File

@@ -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);
}

View File

@@ -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;
}