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

Re: [PATCH] Bad file descriptor on filtering empty files

From
Junio C Hamano <gitster@pobox.com>
Date
Dec 22, 2014, 18:26 UTC
Message-ID
<xmqq7fxja6c8.fsf@gitster.dls.corp.google.com>
In-Reply-To
<87sigbmfd5.fsf@cornell.edu>
William Throwe <wtt6@cornell.edu> writes:
Show 30 quoted lines
> In git 2.2.0 (also tested on 2.2.0.65.g9abc44b), if an external
> smudge/clean filter is called on an empty file git reports something
> like:
> error: copy-fd: read returned Bad file descriptor
> error: cannot feed the input to external filter cat
> error: external filter cat failed
>
> Test case:
>
> mkdir bug
> cd bug
> git init
> git config filter.cat.clean cat
> git config filter.cat.smudge cat
> echo '* filter=cat' >.gitattributes
> touch a
> git add a
>
>
> This started in 9035d75a2be9d80d82676504d69553245017f6d4, which
> introduced the possible call to copy_fd in code called from
> apply_filter.  It appears that NULL as the src argument to apply_filter
> is being used both as a sentinel value to indicate that the fd should be
> used instead and also as a representation of the contents of an empty
> file.  I suggest switching to using fd == -1 as the sentinel as shown in
> the patch below.
>
> Thanks,
> Will
>
William, thanks for raising this issue.
Steffen, comments?
Show 13 quoted lines
> diff --git a/convert.c b/convert.c
> index 9a5612e..0509ac1 100644
> --- a/convert.c
> +++ b/convert.c
> @@ -355,7 +355,7 @@ static int filter_buffer_or_fd(int in, int out, void *data)
>  
>  	sigchain_push(SIGPIPE, SIG_IGN);
>  
> -	if (params->src) {
> +	if (params->fd == -1) {
>  		write_err = (write_in_full(child_process.in, params->src, params->size) < 0);
>  	} else {
>  		write_err = copy_fd(params->fd, child_process.in);
Previous: William Throwe
Message 2 of 2 in “Bad file descriptor on filtering empty files”
  1. Bad file descriptor on filtering empty filesWilliam Throwe, Dec 19, 2014
  2. Junio C HamanoDec 22, 2014

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.