[sheepdog] [PATCH] farm: fix comparison of empty sha1
MORITA Kazutaka
morita.kazutaka at lab.ntt.co.jp
Wed Aug 8 07:21:56 CEST 2012
At Wed, 08 Aug 2012 12:45:13 +0800,
Liu Yuan wrote:
>
> On 08/07/2012 08:49 PM, MORITA Kazutaka wrote:
> > I've not ever met any problems yet. I just noticed that the usage of
> > strlen is wrong.
> >
> > I think the old code doesn't cause fatal problems like segfault, but
> > causes a redundant write to the farm backend store when the sha1 value
> > starts with zero.
>
> I guess you might be confused of '\0' against '0', I don't think there
> is any problem to check sha1 *string* by strlen(). I think the patch
> will cost extra cycles than old one also.
entry->raw.sha1 is not a string but 20 bytes array of sha1 hash, isn't it?
Here is a sample program to show the problem.
==
#include <stdio.h>
#include "sha1.h"
#define SHA1_LEN 20
int main(int argc, char *argv[])
{
unsigned char sha1[SHA1_LEN];
struct sha1_ctx c;
unsigned char *input = "127";
int i;
sha1_init(&c);
sha1_update(&c, input, strlen(input));
sha1_final(&c, sha1);
printf("sha1 hash:\t");
for (i = 0; i < SHA1_LEN; i++)
printf("%02x", sha1[i]);
printf("\n");
printf("strlen(sha1):\t%d\n", strlen((char *)sha1));
return 0;
}
/*
* Result:
*
* sha1 hash: 008451a05e1e7aa32c75119df950d405265e0904
* strlen(sha1): 0
*/
==
Is this what you expect, or am I missing something?
Thanks,
Kazutaka
More information about the sheepdog
mailing list