[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