path: root/sha1dc_git.c
diff options
authorÆvar Arnfjörð Bjarmason <>2017-05-20 11:54:28 (GMT)
committerJunio C Hamano <>2017-05-22 01:20:46 (GMT)
commita0103914c228cee430b37faab212d1769e8218a0 (patch)
tree4529b1cd621837477540389d030bd43df975cee1 /sha1dc_git.c
parentb06d3643105c8758ed019125a4399cb7efdcce2c (diff)
sha1dc: update from upstream
Update sha1dc from the latest version by the upstream maintainer[1]. This version includes a commit of mine which allows for replacing the local modifications done to the upstream files in git.git with macro definitions to monkeypatch it in place. It also brings in a change[2] upstream made for the breakage 2.13.0 introduced on SPARC and other platforms that forbid unaligned access[3]. This means that the code customizations done since the initial import in commit 28dc98e343 ("sha1dc: add collision-detecting sha1 implementation", 2017-03-16) can be done purely via Makefile definitions and by including the content of our own sha1dc_git.[ch] in sha1dc/sha1.c via a macro. 1. 2. 3. "Git 2.13.0 segfaults on Solaris SPARC due to DC_SHA1=YesPlease being on by default" ( Signed-off-by: Ævar Arnfjörð Bjarmason <> Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'sha1dc_git.c')
1 files changed, 24 insertions, 0 deletions
diff --git a/sha1dc_git.c b/sha1dc_git.c
new file mode 100644
index 0000000..4d32b4f
--- /dev/null
+++ b/sha1dc_git.c
@@ -0,0 +1,24 @@
+ * This code is included at the end of sha1dc/sha1.c with the
+ */
+void git_SHA1DCFinal(unsigned char hash[20], SHA1_CTX *ctx)
+ if (!SHA1DCFinal(hash, ctx))
+ return;
+ die("SHA-1 appears to be part of a collision attack: %s",
+ sha1_to_hex(hash));
+void git_SHA1DCUpdate(SHA1_CTX *ctx, const void *vdata, unsigned long len)
+ const char *data = vdata;
+ /* We expect an unsigned long, but sha1dc only takes an int */
+ while (len > INT_MAX) {
+ SHA1DCUpdate(ctx, data, INT_MAX);
+ data += INT_MAX;
+ len -= INT_MAX;
+ }
+ SHA1DCUpdate(ctx, data, len);