From: Torsten Bögershausen Date: Tue, 03 Nov 2015 11:51:24 GMT Subject: Re: [PATCH 1/2] Limit the size of the data block passed to SHA1_Update() Message-ID: <56389FBC.7050909@web.de> In-Reply-To: <1446533930-463-1-git-send-email-apahlevan@ieee.org> On 11/03/2015 07:58 AM, atousa.p@gmail.com wrote: > From: Atousa Pahlevan Duprat Minor comments inline > diff --git a/block-sha1/sha1.h b/block-sha1/sha1.h > index b864df6..d085412 100644 > --- a/block-sha1/sha1.h > +++ b/block-sha1/sha1.h > @@ -18,5 +18,5 @@ void blk_SHA1_Final(unsigned char hashout[20], blk_SHA_CTX *ctx); > > #define git_SHA_CTX blk_SHA_CTX > #define git_SHA1_Init blk_SHA1_Init > -#define git_SHA1_Update blk_SHA1_Update > +#define platform_SHA1_Update blk_SHA1_Update > #define git_SHA1_Final blk_SHA1_Final > diff --git a/cache.h b/cache.h > index 79066e5..a501652 100644 > --- a/cache.h > +++ b/cache.h > @@ -10,12 +10,21 @@ > #include "trace.h" > #include "string-list.h" > > +// platform's underlying implementation of SHA1 Please use /* */ for comments > #include SHA1_HEADER > #ifndef git_SHA_CTX > -#define git_SHA_CTX SHA_CTX > -#define git_SHA1_Init SHA1_Init > -#define git_SHA1_Update SHA1_Update > -#define git_SHA1_Final SHA1_Final > +#define git_SHA_CTX SHA_CTX > +#define git_SHA1_Init SHA1_Init > +#define platform_SHA1_Update SHA1_Update > +#define git_SHA1_Final SHA1_Final > +#endif > + > +// choose whether chunked implementation or not > +#ifdef SHA1_MAX_BLOCK_SIZE > +int git_SHA1_Update_Chunked(SHA_CTX *c, const void *data, size_t len); > +#define git_SHA1_Update git_SHA1_Update_Chunked > +#else > +#define git_SHA1_Update platform_SHA1_Update > #endif > > #include > diff --git a/compat/apple-common-crypto.h b/compat/apple-common-crypto.h > index c8b9b0e..d3fb264 100644 > --- a/compat/apple-common-crypto.h > +++ b/compat/apple-common-crypto.h > @@ -16,6 +16,10 @@ > #undef TYPE_BOOL > #endif > > +#ifndef SHA1_MAX_BLOCK_SIZE > +#error Using Apple Common Crypto library requires setting SHA1_MAX_BLOCK_SIZE > +#endif > + > #ifdef APPLE_LION_OR_NEWER > #define git_CC_error_check(pattern, err) \ > do { \ > diff --git a/compat/sha1_chunked.c b/compat/sha1_chunked.c > new file mode 100644 > index 0000000..61f67de > --- /dev/null > +++ b/compat/sha1_chunked.c > @@ -0,0 +1,19 @@ > +#include "cache.h" > + > +int git_SHA1_Update_Chunked(SHA_CTX *c, const void *data, size_t len) > +{ > + size_t nr; > + size_t total = 0; > + const char *cdata = (const char*)data; > + > + while (len > 0) { size_t is unsigned, isn't it ? Better to use "while (len) {" > + nr = len; > + if (nr > SHA1_MAX_BLOCK_SIZE) > + nr = SHA1_MAX_BLOCK_SIZE; > + platform_SHA1_Update(c, cdata, nr); > + total += nr; > + cdata += nr; > + len -= nr; > + } > + return total; > +}