Some vintage Apple PPC machines build a non-funtional version of git as of git 
13.1 when using the stock gcc compilers that are installed with the OS; the 
SHA1 calculations are faulty. This can be repaired with a simple patch 
(attached).


Stock vintage Apple PPC machines come with gcc-4.0 or gcc-4.2. On MacOS 10.4 
and earlier, or when not using Apple Common Crypto on 10.5, git uses the SHA1 
calculation code from here 
<https://github.com/cr-marcstevens/sha1collisiondetection>. The code in 
<https://github.com/cr-marcstevens/sha1collisiondetection/blob/master/lib/sha1.c>
 tries to detect all systems that are BIG_ENDIAN, but the above noted systems 
fall through because they fail the tests.

It appears that the primary test:

#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__)

only works as of gcc-4.6 and newer, so the code is built as LITTLE_ENDIAN on 
PPC with older gcc versions.


Issue report:

<https://github.com/cr-marcstevens/sha1collisiondetection/issues/40>


MacPorts bug report:

<https://trac.macports.org/ticket/54602>


The included patch to git fixes the issue on our testing.

Thanks for git!

Ken Cunningham




=====

diff --git a/sha1dc/sha1.c b/sha1dc/sha1.c
index 25eded1..5faf5a5 100644
--- a/sha1dc/sha1.c
+++ b/sha1dc/sha1.c
@@ -92,6 +92,10 @@
  */
 #define SHA1DC_BIGENDIAN
 
+#elif (defined(__APPLE__) && defined(__BIG_ENDIAN__) && 
!defined(SHA1DC_BIGENDIAN))
+/* older gcc compilers which are the default  on Apple PPC do not define 
__BYTE_ORDER__ */
+#define SHA1DC_BIGENDIAN
+
 /* Not under GCC-alike or glibc or *BSD or newlib or <processor whitelist> */
 #elif defined(SHA1DC_ON_INTEL_LIKE_PROCESSOR)
 /*

==========


Reply via email to