git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Adam Dinwoodie <adam@dinwoodie.org>
To: Junio C Hamano <gitster@pobox.com>, git@vger.kernel.org
Cc: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
	"Ramsay Jones" <ramsay@ramsayjones.plus.com>
Subject: Re: Git v2.13.1 SHA1 very broken
Date: Tue, 6 Jun 2017 11:03:55 +0100	[thread overview]
Message-ID: <20170606100355.GC25777@dinwoodie.org> (raw)
In-Reply-To: <xmqq4lvtap3m.fsf@gitster.mtv.corp.google.com>

On Tue, Jun 06, 2017 at 10:20:45AM +0900, Junio C Hamano wrote:
> Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:
> 
> > That looks scary, can you please comment out this:
> >
> >     #define SHA1DC_ALLOW_UNALIGNED_ACCESS
> >
> > In sha1dc/sha1.c and see if that helps, alternatively comment out the
> > ifdefs guarded by "#ifdef _MSC_VER" calls in sha1dc/sha1.c
> 
> That is merely a performance (and theoretical correctness) thing,
> no?

Confirmed rebuilding with either of these suggested changes has t0000.46
still failing.

> > The functional differences between 2.13.0 and 2.13.1 on that platform
> > should be none aside from possibly those changes, unless I've missed
> > something.
> 
> If it does not hash correctly, the cause is more likely that the
> endianness detection is going haywire.
> 
>     make CFLAGS="-DSHA1DC_FORCE_LITTLEENDIAN -g -O2 -Wall"

Confirmed rebuilding with this option has t0000 passing.  I can also get
the test to pass with Ramsay Jones' suggestion of using OpenSSL's SHA1.

Digging briefly into the endianness detection, it appears Cygwin has
both _LITTLE_ENDIAN and _BIG_ENDIAN defined.  Git's detection works by
assuming it's in a little endian environment and switching to big endian
if it detects any of the defines that indicate such, and a010391 adds
_BIG_ENDIAN to the set of defines that indicate big endianness.

The obvious quick fix would be one of the two below patches.  I'll also
take the discussion to the Cygwin mailing list in the hope that someone
can explain why Cygwin defines both _LITTLE_ENDIAN and _BIG_ENDIAN (and
indeed _PDP_ENDIAN).

Patch 1 (probably safer?):

diff --git a/sha1dc/sha1.c b/sha1dc/sha1.c
index 3dff80ac7..e47d004b1 100644
--- a/sha1dc/sha1.c
+++ b/sha1dc/sha1.c
@@ -36,6 +36,7 @@
 #undef SHA1DC_BIGENDIAN
 #endif
 #if (!defined SHA1DC_FORCE_LITTLEENDIAN) && \
+    (!defined _LITTLE_ENDIAN) && \
     ((defined(__BYTE_ORDER) && (__BYTE_ORDER == __BIG_ENDIAN)) || \
     (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __BIG_ENDIAN__)) || \
     defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__) || defined(__ARMEB__) || defined(__THUMBEB__) ||  defined(__AARCH64EB__) || \

Patch 2:

diff --git a/sha1dc/sha1.c b/sha1dc/sha1.c
index 3dff80ac7..8d7b1ee7d 100644
--- a/sha1dc/sha1.c
+++ b/sha1dc/sha1.c
@@ -38,7 +38,7 @@
 #if (!defined SHA1DC_FORCE_LITTLEENDIAN) && \
     ((defined(__BYTE_ORDER) && (__BYTE_ORDER == __BIG_ENDIAN)) || \
     (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __BIG_ENDIAN__)) || \
-    defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__) || defined(__ARMEB__) || defined(__THUMBEB__) ||  defined(__AARCH64EB__) || \
+    defined(__BIG_ENDIAN__) || defined(__ARMEB__) || defined(__THUMBEB__) ||  defined(__AARCH64EB__) || \
     defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__) || defined(SHA1DC_FORCE_BIGENDIAN))

 #define SHA1DC_BIGENDIAN

  reply	other threads:[~2017-06-06 10:04 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-05 20:34 Git v2.13.1 SHA1 very broken Adam Dinwoodie
2017-06-05 21:05 ` Ævar Arnfjörð Bjarmason
2017-06-05 23:20   ` Ramsay Jones
2017-06-06  0:11     ` Ramsay Jones
2017-06-06  1:20   ` Junio C Hamano
2017-06-06 10:03     ` Adam Dinwoodie [this message]
2017-06-06 11:55       ` Junio C Hamano
2017-06-06 12:43         ` Adam Dinwoodie
2017-06-06 14:47           ` Continous Integration (was: RE: Git v2.13.1 SHA1 very broken) Jason Pyeron
2017-06-06 15:04             ` Lars Schneider
2017-07-02 20:35               ` Adam Dinwoodie
2017-07-03 12:34                 ` Johannes Schindelin
2017-06-06 15:12           ` [PATCH 0/3] update sha1dc Ævar Arnfjörð Bjarmason
2017-06-06 15:12             ` [PATCH 1/3] sha1dc: update from upstream Ævar Arnfjörð Bjarmason
2017-06-06 15:12             ` [PATCH 2/3] sha1dc: optionally use sha1collisiondetection as a submodule Ævar Arnfjörð Bjarmason
2017-06-06 18:48               ` Stefan Beller
2017-06-06 19:03                 ` Ævar Arnfjörð Bjarmason
2017-06-06 19:09                   ` Stefan Beller
2017-06-06 15:12             ` [PATCH 3/3] sha1collisiondetection: automatically enable when submodule is populated Ævar Arnfjörð Bjarmason
2017-06-06 18:23             ` [PATCH 0/3] update sha1dc Stefan Beller
2017-06-06 18:51               ` Ævar Arnfjörð Bjarmason
2017-06-06 19:01                 ` [PATCH] sha1dc: ignore indent-with-non-tab whitespace violations Jeff King
2017-06-06 19:04                   ` Ævar Arnfjörð Bjarmason
2017-06-06 19:05                   ` Stefan Beller
2017-06-13  2:09             ` [PATCH 0/3] update sha1dc Liam R. Howlett
2017-06-06 12:49         ` Git v2.13.1 SHA1 very broken Morten Welinder

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=20170606100355.GC25777@dinwoodie.org \
    --to=adam@dinwoodie.org \
    --cc=avarab@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=ramsay@ramsayjones.plus.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).