From: Phillip Wood <phillip.wood@talktalk.net>
To: Eric Sunshine <sunshine@sunshineco.com>,
Phillip Wood <phillip.wood@dunelm.org.uk>
Cc: Git List <git@vger.kernel.org>,
Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH v2 2/2] sequencer: fix quoting in write_author_script
Date: Wed, 1 Aug 2018 16:50:40 +0100 [thread overview]
Message-ID: <1f9a9062-445d-0c37-9b21-941d8fef659b@talktalk.net> (raw)
In-Reply-To: <CAPig+cR5VHP8muo5_A_9t7OPZam8O_uPb0nd73B15Ye92n+p7Q@mail.gmail.com>
On 31/07/18 22:39, Eric Sunshine wrote:
> On Tue, Jul 31, 2018 at 7:15 AM Phillip Wood <phillip.wood@talktalk.net> wrote:
>> Single quotes should be escaped as \' not \\'. Note that this only
>> affects authors that contain a single quote and then only external
>> scripts that read the author script and users whose git is upgraded from
>> the shell version of rebase -i while rebase was stopped. This is because
>> the parsing in read_env_script() expected the broken version and for
>> some reason sq_dequote() called by read_author_ident() seems to handle
>> the broken quoting correctly.
>
> Is the:
>
> ...for some reason sq_dequote() called by read_author_ident()
> seems to handle the broken quoting correctly.
>
> bit outdated? We know now from patch 2/4 of my series[1] that
> read_author_ident() wasn't handling it correctly at all. It was merely
> ignoring the return value from sq_dequote() and using whatever broken
> value came back from it.
>
> [1]: https://public-inbox.org/git/20180731073331.40007-3-sunshine@sunshineco.com/
>
>> Helped-by: Johannes Schindelin <johannes.schindelin@gmx.de>
>> Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
>> ---
>> diff --git a/sequencer.c b/sequencer.c
>> @@ -664,14 +664,25 @@ static int write_author_script(const char *message)
>> static int read_env_script(struct argv_array *env)
>> {
>> if (strbuf_read_file(&script, rebase_path_author_script(), 256) <= 0)
>> return -1;
>
> This is not a problem introduced by this patch, but since
> strbuf_read_file() doesn't guarantee that memory hasn't been allocated
> when it returns an error, this is leaking.
>
>> + /*
>> + * write_author_script() used to fail to terminate the GIT_AUTHOR_DATE
>> + * line with a "'" and also escaped "'" incorrectly as "'\\\\''" rather
>> + * than "'\\''". We check for the terminating "'" on the last line to
>> + * see how "'" has been escaped in case git was upgraded while rebase
>> + * was stopped.
>> + */
>> + sq_bug = script.len && script.buf[script.len - 2] != '\'';
>
> I think you need to be checking 'script.len > 1', not just
> 'script.len', otherwise you might access memory outside the allocated
> buffer.
>
> This is a very "delicate" check, assuming that a hand-edited file
> won't end with, say, an extra newline. I wonder if this level of
> backward-compatibility is overkill for such an unlikely case.
I think I'll get rid of the check and instead use a version number
written to .git/rebase-merge/interactive to indicate if we need to fix
the quoting (if there's no number then it needs fixing). We can
increment the version number in the future if we ever need to implement
other fallbacks to handle the case where git got upgraded while rebase
was stopped. I'll send a patch tomorrow
Best Wishes
Phillip
>
>> for (p = script.buf; *p; p++)
>> - if (skip_prefix(p, "'\\\\''", (const char **)&p2))
>> + if (sq_bug && skip_prefix(p, "'\\\\''", &p2))
>> + strbuf_splice(&script, p - script.buf, p2 - p, "'", 1);
>> + else if (skip_prefix(p, "'\\''", &p2))
>> diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
>> @@ -75,6 +75,22 @@ test_expect_success 'rebase --keep-empty' '
>> +test_expect_success 'rebase -i writes correct author-script' '
>> + test_when_finished "test_might_fail git rebase --abort" &&
>> + git checkout -b author-with-sq master &&
>> + GIT_AUTHOR_NAME="Auth O$SQ R" git commit --allow-empty -m with-sq &&
>> + set_fake_editor &&
>> + FAKE_LINES="edit 1" git rebase -ki HEAD^ &&
>
> Hmph, -k doesn't seem to be documented in git-rebase.txt. Is it needed here?
>
next prev parent reply other threads:[~2018-08-01 15:50 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-31 7:33 [PATCH v2 0/4] fix "rebase -i --root" corrupting root commit Eric Sunshine
2018-07-31 7:33 ` [PATCH v2 1/4] sequencer: fix "rebase -i --root" corrupting author header Eric Sunshine
2018-07-31 7:33 ` [PATCH v2 2/4] sequencer: fix "rebase -i --root" corrupting author header timezone Eric Sunshine
2018-07-31 9:50 ` Phillip Wood
2018-07-31 10:15 ` Eric Sunshine
2018-07-31 7:33 ` [PATCH v2 3/4] sequencer: fix "rebase -i --root" corrupting author header timestamp Eric Sunshine
2018-07-31 10:00 ` Phillip Wood
2018-07-31 10:30 ` Eric Sunshine
2018-07-31 7:33 ` [PATCH v2 4/4] sequencer: don't die() on bogus user-edited timestamp Eric Sunshine
2018-07-31 10:02 ` Phillip Wood
2018-07-31 10:38 ` Eric Sunshine
2018-07-31 10:05 ` [PATCH v2 0/4] fix "rebase -i --root" corrupting root commit Phillip Wood
2018-07-31 10:46 ` Eric Sunshine
2018-07-31 11:19 ` Phillip Wood
2018-07-31 11:27 ` Eric Sunshine
2018-07-31 11:15 ` [PATCH v2 0/2] Fix author script quoting Phillip Wood
2018-07-31 11:15 ` [PATCH v2 1/2] sequencer: handle errors in read_author_ident() Phillip Wood
2018-07-31 20:47 ` Eric Sunshine
2018-08-01 9:28 ` Phillip Wood
2018-07-31 11:15 ` [PATCH v2 2/2] sequencer: fix quoting in write_author_script Phillip Wood
2018-07-31 21:39 ` Eric Sunshine
2018-08-01 10:24 ` Phillip Wood
2018-08-01 15:22 ` Junio C Hamano
2018-08-01 15:50 ` Phillip Wood [this message]
2018-08-01 19:19 ` Eric Sunshine
2018-08-01 1:30 ` [PATCH v2 0/4] fix "rebase -i --root" corrupting root commit Hilco Wijbenga
2018-08-01 6:22 ` Eric Sunshine
2018-08-07 1:19 ` Hilco Wijbenga
2018-08-07 3:31 ` Eric Sunshine
2018-08-07 21:09 ` Junio C Hamano
2018-08-27 22:34 ` Johannes Schindelin
2018-08-01 23:25 ` brian m. carlson
2018-08-02 8:09 ` Eric Sunshine
2018-08-02 11:20 ` [PATCH v3 0/2] Fix author script quoting Phillip Wood
2018-08-02 11:20 ` [PATCH v3 1/2] sequencer: handle errors in read_author_ident() Phillip Wood
2018-08-03 7:09 ` Eric Sunshine
2018-08-03 15:53 ` Junio C Hamano
2018-08-02 11:20 ` [PATCH v3 2/2] sequencer: fix quoting in write_author_script Phillip Wood
2018-08-02 17:27 ` Junio C Hamano
2018-08-03 7:59 ` Eric Sunshine
2018-08-03 9:33 ` Phillip Wood
2018-08-03 10:02 ` Eric Sunshine
2018-08-03 14:12 ` Phillip Wood
2018-08-07 17:20 ` Junio C Hamano
2018-08-07 9:34 ` [PATCH v4 0/2] fix author-script quoting Phillip Wood
2018-08-07 9:34 ` [PATCH v4 1/2] sequencer: handle errors from read_author_ident() Phillip Wood
2018-08-08 9:43 ` Eric Sunshine
2018-08-07 9:34 ` [PATCH v4 2/2] sequencer: fix quoting in write_author_script Phillip Wood
2018-08-07 10:23 ` Eric Sunshine
2018-08-07 13:54 ` Phillip Wood
2018-08-08 8:43 ` Eric Sunshine
2018-08-08 16:01 ` Junio C Hamano
2018-08-09 10:06 ` Phillip Wood
2018-08-09 10:08 ` Phillip Wood
2018-08-08 9:39 ` Eric Sunshine
2018-08-09 10:11 ` Phillip Wood
2018-08-08 9:51 ` [PATCH v4 0/2] fix author-script quoting Eric Sunshine
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1f9a9062-445d-0c37-9b21-941d8fef659b@talktalk.net \
--to=phillip.wood@talktalk.net \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=phillip.wood@dunelm.org.uk \
--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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).