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

[PATCH] Bad file descriptor on filtering empty files

From
WTWilliam Throwe <wtt6@cornell.edu>
Date
Dec 19, 2014, 22:41 UTC
Message-ID
<87sigbmfd5.fsf@cornell.edu>

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

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);
Next: Junio C Hamano
Message 1 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.