threads / patch / 50555

patchformat-patch: notice failure to open cover letter for writing

Subject: [PATCH] format-patch: notice failure to open cover letter for writing

## tl;dr

4 messages between Feb 21, 2019 and Feb 22, 2019. Diffs are folded; open one to read it.

replies: 3people: 3as markdown or json

Junio C Hamano· Feb 21, 2019, 23:50 UTC · lore

The make_cover_letter() function is supposed to open a new file for writing, and let the caller write into it via FILE *rev->diffopt.file but because the function does not return anything, the caller does not bother checking the return value.

Make sure it dies, instead of keep going with a NULL output filestream and relying on it to cause a crash.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 builtin/log.c           | 2 +-
 t/t4014-format-patch.sh | 6 ++++++
 2 files changed, 7 insertions(+), 1 deletion(-)
Show changes to 2 files +7 −1

builtin/log.c, t/t4014-format-patch.sh

diff --git a/builtin/log.c b/builtin/log.c
index 3e145fe502..43fc9a07df 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -1047,7 +1047,7 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
 
 	if (!use_stdout &&
 	    open_next_file(NULL, rev->numbered_files ? NULL : "cover-letter", rev, quiet))
-		return;
+		die(_("Failed to create cover-letter file"));
 
 	log_write_email_headers(rev, head, &pp.after_subject, &need_8bit_cte, 0);
 
diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh
index 909c743c13..b6e2fdbc44 100755
--- a/t/t4014-format-patch.sh
+++ b/t/t4014-format-patch.sh
@@ -589,6 +589,12 @@ test_expect_success 'excessive subject' '
 	ls patches/0004-This-is-an-excessively-long-subject-line-for-a-messa.patch
 '
 
+test_expect_success 'failure to write cover-letter aborts gracefully' '
+	test_when_finished "rmdir 0000-cover-letter.patch" &&
+	mkdir 0000-cover-letter.patch &&
+	test_must_fail git format-patch --no-renames --cover-letter -1
+'
+
 test_expect_success 'cover-letter inherits diff options' '
 	git mv file foo &&
 	git commit -m foo &&
Jeff King· Feb 22, 2019, 06:26 UTC · re: Junio C Hamano · lore

Re: [PATCH] format-patch: notice failure to open cover letter for writing

On Thu, Feb 21, 2019 at 03:50:11PM -0800, Junio C Hamano wrote:
Show 7 quoted lines
> The make_cover_letter() function is supposed to open a new file for
> writing, and let the caller write into it via FILE *rev->diffopt.file
> but because the function does not return anything, the caller does not
> bother checking the return value.
> 
> Make sure it dies, instead of keep going with a NULL output
> filestream and relying on it to cause a crash.
Definitely makes sense.
Show 10 quoted lines
> diff --git a/builtin/log.c b/builtin/log.c
> index 3e145fe502..43fc9a07df 100644
> --- a/builtin/log.c
> +++ b/builtin/log.c
> @@ -1047,7 +1047,7 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
>  
>  	if (!use_stdout &&
>  	    open_next_file(NULL, rev->numbered_files ? NULL : "cover-letter", rev, quiet))
> -		return;
> +		die(_("Failed to create cover-letter file"));

I wondered if we should be showing errno here, but it looks like open_next_file() will give us a more specific error (including errno if applicable).

I'd suggest s/F/f/ in the message to match our usual style, though I see this code has a lot of capitalized errors already. :)

Show 5 quoted lines
> +test_expect_success 'failure to write cover-letter aborts gracefully' '
> +	test_when_finished "rmdir 0000-cover-letter.patch" &&
> +	mkdir 0000-cover-letter.patch &&
> +	test_must_fail git format-patch --no-renames --cover-letter -1
> +'
Cute test. :)
-Peff
Duy Nguyen· Feb 22, 2019, 07:50 UTC · re: Jeff King · lore

Re: [PATCH] format-patch: notice failure to open cover letter for writing

On Fri, Feb 22, 2019 at 1:28 PM Jeff King <peff@peff.net> wrote:
Show 13 quoted lines
> > diff --git a/builtin/log.c b/builtin/log.c
> > index 3e145fe502..43fc9a07df 100644
> > --- a/builtin/log.c
> > +++ b/builtin/log.c
> > @@ -1047,7 +1047,7 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
> >
> >       if (!use_stdout &&
> >           open_next_file(NULL, rev->numbered_files ? NULL : "cover-letter", rev, quiet))
> > -             return;
> > +             die(_("Failed to create cover-letter file"));
>
> I'd suggest s/F/f/ in the message to match our usual style, though I see
> this code has a lot of capitalized errors already. :)

Thanks! The lowercase wins over uppercase [1] 1517 to 327. Unfortunately it's a tie in this file. But I think it's still good that new messages stick to lowercase.

[1] counting error/warn/die only with

git grep 'die[_a-z]*(_("[A-Z]\|error[_a-z]*(_("[A-Z]\|warning[_a-z]*(_("[A-Z]' -- \*.c

-- 
Duy
Junio C Hamano· Feb 22, 2019, 17:54 UTC · re: Jeff King · lore

Re: [PATCH] format-patch: notice failure to open cover letter for writing

Jeff King <peff@peff.net> writes:
> I'd suggest s/F/f/ in the message to match our usual style, though I see
> this code has a lot of capitalized errors already. :)
Yup, I'd prepare a prelim clean-up before this step.
Show 7 quoted lines
>> +test_expect_success 'failure to write cover-letter aborts gracefully' '
>> +	test_when_finished "rmdir 0000-cover-letter.patch" &&
>> +	mkdir 0000-cover-letter.patch &&
>> +	test_must_fail git format-patch --no-renames --cover-letter -1
>> +'
>
> Cute test. :)

Those who can find this "cute" would probably know, but for others, this is a trick to test codepath for "cannot create a file" error without requiring SANITY prerequisite.

← back to recent threads