All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pierre Habouzit <madcoder@debian.org>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Bernt Hansen <bernt@alumni.uwaterloo.ca>
Subject: [PATCH] Fix in-place editing in crlf_to_git and ident_to_git.
Date: Fri, 05 Oct 2007 10:20:26 +0200	[thread overview]
Message-ID: <20071005082026.GE19879@artemis.corp> (raw)
In-Reply-To: <87wsu2sad0.fsf@gollum.intra.norang.ca>

When crlf_to_git or ident_to_git are called "in place", the buffer already
is big enough and should not be resized (as it could make the buffer address
change, hence invalidate the `src' pointers !).

Also fix the growth length at the same time: we want to replace the buffer
content (not append) in those functions as they are filters.

Thanks to Bernt Hansen for the bug report.

Signed-off-by: Pierre Habouzit <madcoder@debian.org>
---

  This patch is done on top of master, as strbuf's have been merged.
This is a major issue.

 convert.c |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/convert.c b/convert.c
index 0d5e909..4664197 100644
--- a/convert.c
+++ b/convert.c
@@ -110,7 +110,9 @@ static int crlf_to_git(const char *path, const char *src, size_t len,
 			return 0;
 	}
 
-	strbuf_grow(buf, len);
+	/* only grow if not in place */
+	if (src != buf->buf)
+		strbuf_grow(buf, len - buf->len);
 	dst = buf->buf;
 	if (action == CRLF_GUESS) {
 		/*
@@ -281,12 +283,12 @@ static int apply_filter(const char *path, const char *src, size_t len,
 		ret = 0;
 	}
 	if (close(pipe_feed[0])) {
-		ret = error("read from external filter %s failed", cmd);
+		error("read from external filter %s failed", cmd);
 		ret = 0;
 	}
 	status = finish_command(&child_process);
 	if (status) {
-		ret = error("external filter %s failed %d", cmd, -status);
+		error("external filter %s failed %d", cmd, -status);
 		ret = 0;
 	}
 
@@ -422,7 +424,9 @@ static int ident_to_git(const char *path, const char *src, size_t len,
 	if (!ident || !count_ident(src, len))
 		return 0;
 
-	strbuf_grow(buf, len);
+	/* only grow if not in place */
+	if (src != buf->buf)
+		strbuf_grow(buf, len - buf->len);
 	dst = buf->buf;
 	for (;;) {
 		dollar = memchr(src, '$', len);
-- 
1.5.3.4.207.gc79d4-dirty

       reply	other threads:[~2007-10-05  8:20 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <87wsu2sad0.fsf@gollum.intra.norang.ca>
2007-10-05  8:20 ` Pierre Habouzit [this message]
2007-10-05  8:11   ` [AGGREGATED PATCH] Fix in-place editing functions in convert.c Pierre Habouzit
2007-10-05  9:24     ` Johannes Sixt
2007-10-05 13:07     ` Bernt Hansen
2007-10-05 15:26     ` Linus Torvalds
2007-10-05 15:50       ` Pierre Habouzit
2007-10-05 16:21       ` Sam Ravnborg
2007-10-05 16:35         ` Pierre Habouzit
2007-10-05 17:25           ` Sam Ravnborg
2007-10-05 16:43         ` Linus Torvalds
2007-10-05 17:24           ` Sam Ravnborg
2007-10-05 18:05             ` Linus Torvalds
2007-10-05 19:27               ` Dmitry Potapov
2007-10-05 19:33                 ` Linus Torvalds
2007-10-05  8:27   ` [PATCH] Fix memory leak in apply_filter Pierre Habouzit
2007-10-05  8:29   ` Pierre Habouzit
2007-10-05  8:30   ` [PATCH] Fix in-place editing in crlf_to_git and ident_to_git Johannes Schindelin
2007-10-05  8:40     ` Pierre Habouzit

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20071005082026.GE19879@artemis.corp \
    --to=madcoder@debian.org \
    --cc=bernt@alumni.uwaterloo.ca \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.