git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 1/1] vreportf: Fix interleaving issues, remove 4096 limitation

From
Jeff King <peff@peff.net>
Date
Oct 25, 2019, 22:11 UTC
Message-ID
<20191025221118.GA29213@sigill.intra.peff.net>
In-Reply-To
<nycvar.QRO.7.76.6.1910251548560.46@tvgsbejvaqbjf.bet>
On Fri, Oct 25, 2019 at 04:02:36PM +0200, Johannes Schindelin wrote:
Show 25 quoted lines
> ... and indeed, I verified that this patch fixes the problem:
> 
> -- snip --
> diff --git a/usage.c b/usage.c
> index 2fdb20086bd..7f5bdfb0f40 100644
> --- a/usage.c
> +++ b/usage.c
> @@ -10,13 +10,16 @@ void vreportf(const char *prefix, const char *err, va_list params)
>  {
>  	char msg[4096];
>  	char *p;
> -
> -	vsnprintf(msg, sizeof(msg), err, params);
> +	size_t off = strlcpy(msg, prefix, sizeof(msg));
> +	int ret = vsnprintf(msg + off, sizeof(msg) - off, err, params);
>  	for (p = msg; *p; p++) {
>  		if (iscntrl(*p) && *p != '\t' && *p != '\n')
>  			*p = '?';
>  	}
> -	fprintf(stderr, "%s%s\n", prefix, msg);
> +	if (ret > 0) {
> +		msg[off + ret] = '\n'; /* we no longer need a NUL */
> +		write_in_full(2, msg, off + ret + 1);
> +	}
>  }
Heh. This is quite similar to what I posted in:
  https://public-inbox.org/git/20190828145412.GB14432@sigill.intra.peff.net/

though I missed the cleverness with "we no longer need a NUL" to get an extra byte. ;)

Show 7 quoted lines
> > except truncation to 4096. Then I would expect a patch to increase
> > buffer size to 8192 in the next couple years. And if you also try to
> > solve truncation, it will get you very close to my code.
> 
> My point is: I don't want to "fix" truncation. I actually think of it as
> a feature. An error message that is longer than the average news article
> I read is too long, period.

Yeah. As the person responsible for many of the "avoid truncation" works referenced in the original patch, I have come to the conclusion that it is not worth the complexity. Even when we do manage to produce a gigantic error message correctly, it's generally not very readable.

That's basically what I came here to say, and I was pleased to find that you had already argued for it quite well. So I'll just add my support for the direction you've taken the conversation.

I _do_ wish we could do the truncation more intelligently. I'd much rather see:

  error: unable to open 'absurdly-long-file-name...': permission denied
than:
  error: unable to open 'absurdly-long-file-name-that-goes-on-forever-and-ev

But I don't think it's possible without reimplementing snprintf ourselves.

-Peff
Previous: Johannes SchindelinNext: Alexandr Miloslavskiy
Message 10 of 16 in “vreportf: Fix interleaving issues, remove 4096 limitation”
  1. 0/1 vreportf: Fix interleaving issues, remove 4096 limitationAlexandr Miloslavskiy via GitGitGadget, Oct 22, 2019
  2. 1/1 vreportf: Fix interleaving issues, remove 4096 limitationAlexandr Miloslavskiy via GitGitGadget, Oct 22, 2019
  3. 0/1 vreportf: Fix interleaving issues, remove 4096 limitationAlexandr Miloslavskiy via GitGitGadget, Oct 22, 2019
  4. 1/1 vreportf: Fix interleaving issues, remove 4096 limitationAlexandr Miloslavskiy via GitGitGadget, Oct 22, 2019
  5. Johannes SchindelinOct 25, 2019
  6. Alexandr MiloslavskiyOct 25, 2019
  7. Johannes SchindelinOct 25, 2019
  8. Alexandr MiloslavskiyOct 25, 2019
  9. Johannes SchindelinOct 25, 2019
  10. Jeff KingOct 25, 2019
  11. Alexandr MiloslavskiyOct 26, 2019
  12. Johannes SchindelinOct 26, 2019
  13. Jeff KingOct 26, 2019
  14. Johannes SchindelinOct 28, 2019
  15. Johannes SchindelinOct 26, 2019
  16. Johannes SchindelinOct 26, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.