mirror of
https://github.com/FAUSheppy/colorredstderr-mirror
synced 2025-12-09 16:38:32 +01:00
Handle invalid arguments to close()/fclose() better.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user