From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH v2 00/17] Peace with CRLF
Date: Mon, 4 Jan 2016 13:25:28 +0100 (CET) [thread overview]
Message-ID: <alpine.DEB.2.20.1601041244370.14434@virtualbox> (raw)
In-Reply-To: <1450303398-25900-1-git-send-email-gitster@pobox.com>
Hi Junio,
On Wed, 16 Dec 2015, Junio C Hamano wrote:
> I inspected all the callsites of this function to see if it is safe
> to use such an updated logic at these callsites, and did not find
> anything problematic. I could update strbuf_getline() in place, but
> just to be extra careful, this series instead introduces another
> helper, strbuf_getline_crlf(), that is aware of this CRLF business,
> and convert the ones that are safe to update as we verify.
>
> * This series converts only the callers of strbuf_getline() that
> would misbehave when fed a file with CRLF-terminated lines and
> use the data with an unwanted CR appended at the end. With the
> update the code should work as intended with such a file, without
> breaking the expected behaviour when working on a file with
> LF-terminated lines.
>
> * Callers of strbuf_getline() that expect to only read from our own
> output do not have to accommodate CRLF-terminated lines, but they
> can be updated to do so safely if we do not rely on the ability
> to express a payload that has CR at the end. For example, the
> insn sheet "rebase -i" uses typically ends each line with a
> commit log summary that we ourselves do not read or use, so even
> if the end-user on a platform with LF lines deliberately does
> insert \r at the end of the line and strbuf_gets() removed that
> \r from the payload, no unexpected behaviour should happen.
>
> This series does not touch them, but it may be a good GSoC
> microproject to convert them to use strbuf_getline_crlf().
>
> * Callers of strbuf_getline() that call strbuf_trim() immediately
> on the result before doing anything, or otherwise have logic that
> tolerates whitespaces at the end of the line, can continue using
> strbuf_getline() and will not misbehave on CRLF-terminated lines.
>
> This series does not touch them; converting them to use
> strbuf_getline_crlf() would a good way to document them as
> dealing with "text". While doing so, they can also lose their
> custom logic that happens to make CRLF-terminated lines work.
>
> * A caller of strbuf_getline() that wants to only see LF-terminated
> lines (in other words, "ABC\r\n" must be treated as a line with 4
> bytes payload on it, A B C and CR), would be broken if we replace
> it with strbuf_getline_crlf(). This series does not touch them,
> and no follow-up series should, either.
Thanks for the detailed explanation. I totally agree that (2) would make
for a good micro-project.
While I am pretty convinced that strbuf_getline() that retains a CR makes
no sense, it is obviously the correct thing to prove that rather than
assume it (after all, some caller might exploit strbuf_getline() for its
auto-growing capabilities even on a binary stream when it is known that it
cannot contain a 0x0a).
And please accept my gratitude for tackling this project.
Ciao,
Dscho
next prev parent reply other threads:[~2016-01-04 12:25 UTC|newest]
Thread overview: 114+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-11 20:21 [PATCH] revisions --stdin: accept CRLF line terminators Johannes Sixt
2015-08-11 21:35 ` Junio C Hamano
2015-08-11 22:14 ` Junio C Hamano
2015-08-12 18:24 ` Johannes Sixt
2015-10-28 22:25 ` [PATCH 00/17] Peace with CRLF Junio C Hamano
2015-10-28 22:25 ` [PATCH 01/17] strbuf: add strbuf_gets() Junio C Hamano
2015-10-28 22:25 ` [PATCH 02/17] check-attr, check-ignore, checkout-index: read paths with strbuf_gets() Junio C Hamano
2015-10-28 22:25 ` [PATCH 03/17] update-index: read --index-info " Junio C Hamano
2015-10-28 22:25 ` [PATCH 04/17] update-index: read list of paths with strbuf_gets() under --stdin Junio C Hamano
2015-10-28 22:25 ` [PATCH 05/17] mktree: read textual tree representation with strbuf_gets() Junio C Hamano
2015-10-28 22:25 ` [PATCH 06/17] hash-object: read --stdin-paths " Junio C Hamano
2015-10-28 22:25 ` [PATCH 07/17] revision: read --stdin " Junio C Hamano
2015-10-28 22:25 ` [PATCH 08/17] rev-parse: read parseopt spec " Junio C Hamano
2015-10-28 22:25 ` [PATCH 09/17] ident.c: read /etc/mailname " Junio C Hamano
2015-10-28 22:25 ` [PATCH 10/17] remote.c: read $GIT_DIR/remotes/* " Junio C Hamano
2015-10-28 22:25 ` [PATCH 11/17] clone/sha1_file: read info/alternates " Junio C Hamano
2015-10-28 22:25 ` [PATCH 12/17] transport-helper: read helper response " Junio C Hamano
2015-10-28 22:25 ` [PATCH 13/17] cat-file: read batch stream " Junio C Hamano
2015-10-28 22:25 ` [PATCH 14/17] column: read lines " Junio C Hamano
2015-10-28 22:25 ` [PATCH 15/17] send-pack: read list of refs " Junio C Hamano
2015-10-28 22:26 ` [PATCH 16/17] grep: read -f file " Junio C Hamano
2015-10-28 22:26 ` [PATCH 17/17] test-sha1-array: read command stream " Junio C Hamano
2015-12-16 22:03 ` [PATCH v2 00/17] Peace with CRLF Junio C Hamano
2015-12-16 22:03 ` [PATCH v2 01/17] strbuf: make strbuf_getline_crlf() global Junio C Hamano
2016-01-04 12:25 ` Johannes Schindelin
2016-01-04 19:17 ` Junio C Hamano
2015-12-16 22:03 ` [PATCH v2 02/17] check-attr, check-ignore, checkout-index: read paths with strbuf_getline_crlf() Junio C Hamano
2016-01-04 12:25 ` Johannes Schindelin
2016-01-04 12:27 ` Johannes Schindelin
2016-01-04 19:20 ` Junio C Hamano
2015-12-16 22:03 ` [PATCH v2 03/17] update-index: read --index-info " Junio C Hamano
2016-01-04 12:27 ` Johannes Schindelin
2016-01-04 19:50 ` Junio C Hamano
2015-12-16 22:03 ` [PATCH v2 04/17] update-index: read list of paths with strbuf_getline_crlf() under --stdin Junio C Hamano
2016-01-04 12:27 ` Johannes Schindelin
2015-12-16 22:03 ` [PATCH v2 05/17] mktree: read textual tree representation with strbuf_getline_crlf() Junio C Hamano
2016-01-04 12:27 ` Johannes Schindelin
2015-12-16 22:03 ` [PATCH v2 06/17] hash-object: read --stdin-paths " Junio C Hamano
2015-12-16 22:03 ` [PATCH v2 07/17] revision: read --stdin " Junio C Hamano
2015-12-16 22:03 ` [PATCH v2 08/17] rev-parse: read parseopt spec " Junio C Hamano
2015-12-16 22:03 ` [PATCH v2 09/17] ident.c: read /etc/mailname " Junio C Hamano
2015-12-16 22:03 ` [PATCH v2 10/17] remote.c: read $GIT_DIR/remotes/* " Junio C Hamano
2015-12-16 22:03 ` [PATCH v2 11/17] clone/sha1_file: read info/alternates " Junio C Hamano
2015-12-16 22:03 ` [PATCH v2 12/17] transport-helper: read helper response " Junio C Hamano
2015-12-16 22:03 ` [PATCH v2 13/17] cat-file: read batch stream " Junio C Hamano
2015-12-16 22:03 ` [PATCH v2 14/17] column: read lines " Junio C Hamano
2015-12-16 22:03 ` [PATCH v2 15/17] send-pack: read list of refs " Junio C Hamano
2015-12-16 22:03 ` [PATCH v2 16/17] grep: read -f file " Junio C Hamano
2016-01-04 12:27 ` Johannes Schindelin
2016-01-04 19:30 ` Junio C Hamano
2015-12-16 22:03 ` [PATCH v2 17/17] test-sha1-array: read command stream " Junio C Hamano
2016-01-04 12:27 ` Johannes Schindelin
2016-01-04 12:25 ` Johannes Schindelin [this message]
2016-01-14 3:03 ` [PREVIEW v3 0/9] Preview of "Peace with CRLF" rerolled Junio C Hamano
2016-01-14 3:03 ` [PREVIEW v3 1/9] strbuf: miniscule style fix Junio C Hamano
2016-01-14 3:03 ` [PREVIEW v3 2/9] strbuf: make strbuf_getline_crlf() global Junio C Hamano
2016-01-14 3:03 ` [PREVIEW v3 3/9] strbuf: introduce strbuf_getline_{lf,nul}() Junio C Hamano
2016-01-14 3:03 ` [PREVIEW v3 4/9] mktree: there are only two line terminators Junio C Hamano
2016-01-14 10:11 ` Jeff King
2016-01-14 3:03 ` [PREVIEW v3 5/9] check-attr: " Junio C Hamano
2016-01-14 3:03 ` [PREVIEW v3 6/9] check-ignore: " Junio C Hamano
2016-01-14 3:03 ` [PREVIEW v3 7/9] update-index: " Junio C Hamano
2016-01-14 10:09 ` Jeff King
2016-01-14 3:03 ` [PREVIEW v3 8/9] checkout-index: " Junio C Hamano
2016-01-14 10:18 ` Jeff King
2016-01-14 17:13 ` Junio C Hamano
2016-01-14 20:13 ` Jeff King
2016-01-14 3:03 ` [PREVIEW v3 9/9] strbuf: give strbuf_getline() to the "most text friendly" variant Junio C Hamano
2016-01-14 3:03 ` [PREVIEW v3 9/9] strbuf: retire strbuf_getline() for now Junio C Hamano
2016-01-14 3:09 ` Junio C Hamano
2016-01-14 10:23 ` [PREVIEW v3 0/9] Preview of "Peace with CRLF" rerolled Jeff King
2016-01-14 23:58 ` [PATCH v4 00/21] Peace with CRLF Junio C Hamano
2016-01-14 23:58 ` [PATCH v4 01/21] strbuf: miniscule style fix Junio C Hamano
2016-01-14 23:58 ` [PATCH v4 02/21] strbuf: make strbuf_getline_crlf() global Junio C Hamano
2016-01-14 23:58 ` [PATCH v4 03/21] strbuf: introduce strbuf_getline_{lf,nul}() Junio C Hamano
2016-01-14 23:58 ` [PATCH v4 04/21] mktree: there are only two possible line terminations Junio C Hamano
2016-01-14 23:58 ` [PATCH v4 05/21] check-attr: " Junio C Hamano
2016-01-15 19:16 ` Jeff King
2016-01-15 19:36 ` Jeff King
2016-01-15 21:20 ` Junio C Hamano
2016-01-15 21:23 ` Jeff King
2016-01-15 21:29 ` Junio C Hamano
2016-01-14 23:58 ` [PATCH v4 06/21] check-ignore: " Junio C Hamano
2016-01-14 23:58 ` [PATCH v4 07/21] update-index: " Junio C Hamano
2016-01-14 23:58 ` [PATCH v4 08/21] checkout-index: " Junio C Hamano
2016-01-15 20:08 ` Jeff King
2016-01-15 20:20 ` Jeff King
2016-01-15 21:22 ` Junio C Hamano
2016-01-15 23:31 ` Junio C Hamano
2016-01-14 23:58 ` [PATCH v4 09/21] strbuf: give strbuf_getline() to the "most text friendly" variant Junio C Hamano
2016-01-15 1:46 ` Eric Sunshine
2016-01-15 18:02 ` Junio C Hamano
2016-01-14 23:58 ` [PATCH v4 10/21] hash-object: read --stdin-paths with strbuf_getline() Junio C Hamano
2016-01-15 20:23 ` Jeff King
2016-01-14 23:58 ` [PATCH v4 11/21] revision: read --stdin " Junio C Hamano
2016-01-15 1:50 ` Eric Sunshine
2016-01-15 18:38 ` Junio C Hamano
2016-01-15 20:27 ` Jeff King
2016-01-14 23:58 ` [PATCH v4 12/21] rev-parse: read parseopt spec " Junio C Hamano
2016-01-14 23:58 ` [PATCH v4 13/21] ident.c: read /etc/mailname " Junio C Hamano
2016-01-14 23:58 ` [PATCH v4 14/21] remote.c: read $GIT_DIR/remotes/* " Junio C Hamano
2016-01-14 23:58 ` [PATCH v4 15/21] clone/sha1_file: read info/alternates " Junio C Hamano
2016-01-15 1:52 ` Eric Sunshine
2016-01-14 23:58 ` [PATCH v4 16/21] transport-helper: read helper response " Junio C Hamano
2016-01-15 20:31 ` Jeff King
2016-01-14 23:58 ` [PATCH v4 17/21] cat-file: read batch stream " Junio C Hamano
2016-01-15 20:41 ` Jeff King
2016-01-14 23:58 ` [PATCH v4 18/21] column: read lines " Junio C Hamano
2016-01-15 20:43 ` Jeff King
2016-01-14 23:58 ` [PATCH v4 19/21] send-pack: read list of refs " Junio C Hamano
2016-01-14 23:58 ` [PATCH v4 20/21] grep: read -f file " Junio C Hamano
2016-01-14 23:58 ` [PATCH v4 21/21] test-sha1-array: read command stream " Junio C Hamano
2016-01-15 19:10 ` [PATCH v4 00/21] Peace with CRLF Jeff King
2016-01-15 20:49 ` Jeff King
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=alpine.DEB.2.20.1601041244370.14434@virtualbox \
--to=johannes.schindelin@gmx.de \
--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 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 NNTP newsgroup(s).