git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Stefan Beller <sbeller@google.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: Stefan Beller <stefanbeller@gmail.com>,
	"git@vger.kernel.org" <git@vger.kernel.org>
Subject: Re: [PATCH 03/10] diff.c: drop tautologous condition in emit_line_0
Date: Fri, 16 Sep 2016 16:04:29 -0700	[thread overview]
Message-ID: <CAGZ79kbRBqEMib=ym9xE2E_Tw4r_nA+wvU9NDfjnJRLKXk8ZzQ@mail.gmail.com> (raw)
In-Reply-To: <xmqq1t0oy8t8.fsf@gitster.mtv.corp.google.com>

On Mon, Sep 12, 2016 at 4:53 PM, Junio C Hamano <gitster@pobox.com> wrote:
> Stefan Beller <stefanbeller@gmail.com> writes:
>
>> diff --git a/diff.c b/diff.c
>> index 156c2aa..9d2e704 100644
>> --- a/diff.c
>> +++ b/diff.c
>> @@ -460,8 +460,7 @@ static void emit_line_0(struct diff_options *o, const char *set, const char *res
>>
>>       if (len == 0) {
>>               has_trailing_newline = (first == '\n');
>> -             has_trailing_carriage_return = (!has_trailing_newline &&
>> -                                             (first == '\r'));
>> +             has_trailing_carriage_return = (first == '\r');
>>               nofirst = has_trailing_newline || has_trailing_carriage_return;
>>       } else {
>>               has_trailing_newline = (len > 0 && line[len-1] == '\n');
>
> Interesting.
>
> This may be a mis-conversion at 250f7993 ("diff.c: split emit_line()
> from the first char and the rest of the line", 2009-09-14), I
> suspect.  The original took line[] with length and peeked for '\n',
> and when it saw one, it decremented length before checking
> line[len-1] for '\r'.
>
> But of course if there is only one byte on the line (i.e. len == 0
> after first is stripped off), it cannot be both '\n' or '\r' at the
> same time.
>
> Thanks for spotting.

Oh, right, it used to be possible to remove \r\n completely and that information
was then kept as has_trailing_newline = has_trailing_carriage_return = 1;
and the resulting line is kept completely without ending line.

After some thought I don't think I can use this mis-conversion
to trigger a bug though, because the len=0 can only ever happen
if first is '\n' alone essentially.

Another thing I noticed when playing around with diffs:

    $ printf "\r\n" >crlf
    $ git commit crlf -m "add file crlf, empty line"
    $ printf "non zero length\r\n" >crlf
    $ diff --git a/crlf b/crlf
    $ index d3f5a12..ece7140 100644
    --- a/crlf
    +++ b/crlf
    @@ -1 +1 @@
    -
    +non zero length^M
    $ # The - line is missing a ^M ?

  reply	other threads:[~2016-09-16 23:04 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-11  5:42 [PATCH 00/10] Another preparatory series for rename detection Stefan Beller
2016-09-11  5:42 ` [PATCH 01/10] diff: move line ending check into emit_hunk_header Stefan Beller
2016-09-12 23:35   ` Junio C Hamano
2016-09-11  5:42 ` [PATCH 02/10] diff: emit_{add, del, context}_line to increase {pre,post}image line count Stefan Beller
2016-09-12 23:47   ` Junio C Hamano
2016-09-11  5:42 ` [PATCH 03/10] diff.c: drop tautologous condition in emit_line_0 Stefan Beller
2016-09-12 23:53   ` Junio C Hamano
2016-09-16 23:04     ` Stefan Beller [this message]
2016-09-11  5:42 ` [PATCH 04/10] diff.c: rename diff_flush_patch to diff_flush_patch_filepair Stefan Beller
2016-09-12 23:53   ` Junio C Hamano
2016-09-11  5:42 ` [PATCH 05/10] diff.c: reintroduce diff_flush_patch for all files Stefan Beller
2016-09-13  0:05   ` Junio C Hamano
2016-09-11  5:42 ` [PATCH 06/10] diff.c: emit_line_0 can handle no color Stefan Beller
2016-09-13  0:11   ` Junio C Hamano
2016-09-13  0:25     ` Stefan Beller
2016-09-11  5:42 ` [PATCH 07/10] diff.c: convert fn_out_consume to use emit_line_* Stefan Beller
2016-09-13  0:25   ` Junio C Hamano
2016-09-13  0:41     ` Stefan Beller
2016-09-11  5:42 ` [PATCH 08/10] diff.c: convert emit_rewrite_diff " Stefan Beller
2016-09-11  5:42 ` [PATCH 09/10] diff.c: convert emit_rewrite_lines to use emit_line_0 Stefan Beller
2016-09-11  5:42 ` [PATCH 10/10] submodule.c: convert show_submodule_summary to use emit_line_fmt Stefan Beller

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='CAGZ79kbRBqEMib=ym9xE2E_Tw4r_nA+wvU9NDfjnJRLKXk8ZzQ@mail.gmail.com' \
    --to=sbeller@google.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=stefanbeller@gmail.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).