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

[PATCH] lf_to_crlf_filter(): tell the caller we added "\n" when draining

From
Junio C Hamano <gitster@pobox.com>
Date
Dec 16, 2011, 22:43 UTC
Message-ID
<7vaa6sgmt3.fsf_-_@alter.siamese.dyndns.org>
In-Reply-To
<7viplggoq9.fsf@alter.siamese.dyndns.org>

This can only happen when the input size is multiple of the buffer size of the cascade filter (16k) and ends with an LF, but in such a case, the code forgot to tell the caller that it added the "\n" it could not add during the last round.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 convert.c |   12 +++++++-----
 1 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/convert.c b/convert.c
index c2c2c11..c028275 100644
--- a/convert.c
+++ b/convert.c
@@ -879,7 +879,7 @@ int is_null_stream_filter(struct stream_filter *filter)
 
 struct lf_to_crlf_filter {
 	struct stream_filter filter;
-	int want_lf;
+	unsigned want_lf:1;
 };
 
 static int lf_to_crlf_filter_fn(struct stream_filter *filter,
@@ -895,8 +895,11 @@ static int lf_to_crlf_filter_fn(struct stream_filter *filter,
 		lf_to_crlf->want_lf = 0;
 	}
 
-	if (!input)
-		return 0; /* We've already dealt with the state */
+	/* We are told to drain */
+	if (!input) {
+		*osize_p -= o;
+		return 0;
+	}
 
 	count = *isize_p;
 	if (count) {
@@ -931,10 +934,9 @@ static struct stream_filter_vtbl lf_to_crlf_vtbl = {
 
 static struct stream_filter *lf_to_crlf_filter(void)
 {
-	struct lf_to_crlf_filter *lf_to_crlf = xmalloc(sizeof(*lf_to_crlf));
+	struct lf_to_crlf_filter *lf_to_crlf = xcalloc(1, sizeof(*lf_to_crlf));
 
 	lf_to_crlf->filter.vtbl = &lf_to_crlf_vtbl;
-	lf_to_crlf->want_lf = 0;
 	return (struct stream_filter *)lf_to_crlf;
 }
 
-- 
1.7.8.351.g9111b
Previous: Junio C HamanoNext: Henrik Grubbström
Message 10 of 16 in “Infinite loop in cascade_filter_fn()”
  1. Henrik GrubbströmNov 23, 2011
  2. Carlos Martín NietoNov 25, 2011
  3. Carlos Martín NietoNov 25, 2011
  4. Henrik GrubbströmNov 25, 2011
  5. Carlos Martín NietoNov 25, 2011
  6. Junio C HamanoNov 26, 2011
  7. Carlos Martín NietoNov 28, 2011
  8. Junio C HamanoNov 28, 2011
  9. Junio C HamanoDec 16, 2011
  10. lf_to_crlf_filter(): tell the caller we added "\n" when drainingJunio C Hamano, Dec 16, 2011
  11. Henrik GrubbströmDec 19, 2011
  12. Junio C HamanoDec 19, 2011
  13. Carlos Martín NietoDec 19, 2011
  14. Henrik GrubbströmNov 25, 2011
  15. Carlos Martín NietoNov 25, 2011
  16. Henrik GrubbströmNov 25, 2011

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.