From: Johannes Schindelin <redacted>
The `split_mbox()` function calls fileno(f) to check whether the input
is a terminal, but the NULL check for f (from `fopen()`) does not happen
until later. When the file cannot be opened, f is NULL, and
`fileno(NULL)` is undefined behavior, typically crashing with a
segmentation fault.
Move the NULL check above the `isatty()`/`fileno()` call so the error
path is taken before any use of the potentially-NULL handle.
Pointed out by Coverity.
Assisted-by: Claude Opus 4.6
Signed-off-by: Johannes Schindelin <redacted>
---
builtin/mailsplit.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/builtin/mailsplit.c b/builtin/mailsplit.c
index 264df6259a..0993418e63 100644
--- a/builtin/mailsplit.c
+++ b/builtin/mailsplit.c
@@ -225,14 +225,14 @@ static int split_mbox(const char *file, const char *dir, int allow_bare,
FILE *f = !strcmp(file, "-") ? stdin : fopen(file, "r");
int file_done = 0;
- if (isatty(fileno(f)))
- warning(_("reading patches from stdin/tty..."));
-
if (!f) {
error_errno("cannot open mbox %s", file);
goto out;
}
+ if (isatty(fileno(f)))
+ warning(_("reading patches from stdin/tty..."));
+
do {
peek = fgetc(f);
if (peek == EOF) {--
gitgitgadget