From: "Johannes Schindelin via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: "Eric Sunshine" <sunshine@sunshineco.com>,
"Michal Suchánek" <msuchanek@suse.de>,
"Johannes Schindelin" <johannes.schindelin@gmx.de>,
"Junio C Hamano" <gitster@pobox.com>
Subject: [PATCH v2 0/1] Avoid segmentation fault in git range-diff when diff.noprefix=true
Date: Wed, 02 Oct 2019 14:10:46 -0700 (PDT) [thread overview]
Message-ID: <pull.373.v2.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.373.git.gitgitgadget@gmail.com>
This PR was inspired by this bug report:
https://public-inbox.org/git/20191002141615.GB17916@kitsune.suse.cz/T/#me576615d7a151cf2ed46186c482fbd88f9959914
Changes since v1:
* Use a command-line option instead of a command-line config setting.
* Instead of forcing a prefix, force no prefix (and adjust the strip
level).
* Fix typo "all" -> "call" in the commit message (and adjust it to reflect
the other changes since v1, too).
Johannes Schindelin (1):
range-diff: internally force `diff.noprefix=true`
range-diff.c | 3 ++-
t/t3206-range-diff.sh | 4 ++++
2 files changed, 6 insertions(+), 1 deletion(-)
base-commit: bc12974a897308fd3254cf0cc90319078fe45eea
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-373%2Fdscho%2Frange-diff-requires-diff-prefix-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-373/dscho/range-diff-requires-diff-prefix-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/373
Range-diff vs v1:
1: 1f84f92846 ! 1: 9993a607be range-diff: internally force `diff.noprefix=false`
@@ -1,6 +1,6 @@
Author: Johannes Schindelin <johannes.schindelin@gmx.de>
- range-diff: internally force `diff.noprefix=false`
+ range-diff: internally force `diff.noprefix=true`
When parsing the diffs, `range-diff` expects to see the prefixes `a/`
and `b/` in the diff headers.
@@ -9,25 +9,33 @@
`diff.noprefix=true`. As `range-diff` is not prepared for that
situation, this will cause a segmentation fault.
- Let's avoid that by forcing `diff.noprefix=false` just for that all to
- `git log` that generates the diffs that `range-diff` wants to parse.
+ Let's avoid that by passing the `--no-prefix` option to the `git log`
+ process that generates the diffs that `range-diff` wants to parse.
+ And of course expect the output to have no prefixes, then.
- Noticed-by: Michal Suchánek <msuchanek@suse.de>
+ Reported-by: Michal Suchánek <msuchanek@suse.de>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
diff --git a/range-diff.c b/range-diff.c
--- a/range-diff.c
+++ b/range-diff.c
@@
- int offset, len;
- size_t size;
-- argv_array_pushl(&cp.args, "log", "--no-color", "-p", "--no-merges",
-+ argv_array_pushl(&cp.args, "-c", "diff.noprefix=false",
-+ "log", "--no-color", "-p", "--no-merges",
+ argv_array_pushl(&cp.args, "log", "--no-color", "-p", "--no-merges",
"--reverse", "--date-order", "--decorate=no",
++ "--no-prefix",
/*
* Choose indicators that are not used anywhere
+ * else in diffs, but still look reasonable
+@@
+ if (!util->diff_offset)
+ util->diff_offset = buf.len;
+ line[len - 1] = '\n';
+- len = parse_git_diff_header(&root, &linenr, 1, line,
++ len = parse_git_diff_header(&root, &linenr, 0, line,
+ len, size, &patch);
+ if (len < 0)
+ die(_("could not parse git header '%.*s'"), (int)len, line);
diff --git a/t/t3206-range-diff.sh b/t/t3206-range-diff.sh
--- a/t/t3206-range-diff.sh
--
gitgitgadget
next prev parent reply other threads:[~2019-10-02 21:10 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-02 18:05 [PATCH 0/1] Avoid segmentation fault in git range-diff when diff.noprefix=true Johannes Schindelin via GitGitGadget
2019-10-02 18:05 ` [PATCH 1/1] range-diff: internally force `diff.noprefix=false` Johannes Schindelin via GitGitGadget
2019-10-02 18:34 ` Eric Sunshine
2019-10-02 19:56 ` Michal Suchánek
2019-10-02 20:06 ` Junio C Hamano
2019-10-02 20:30 ` Johannes Schindelin
2019-10-03 0:43 ` Junio C Hamano
2019-10-03 0:41 ` Junio C Hamano
2019-10-02 21:10 ` Johannes Schindelin via GitGitGadget [this message]
2019-10-02 21:10 ` [PATCH v2 1/1] range-diff: internally force `diff.noprefix=true` Johannes Schindelin via GitGitGadget
2019-10-03 2:11 ` Junio C Hamano
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=pull.373.v2.git.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=johannes.schindelin@gmx.de \
--cc=msuchanek@suse.de \
--cc=sunshine@sunshineco.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.