On 08/08/2012 01:21 PM, MORITA Kazutaka wrote:
> 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
> 

Oops, it was my misunderstanding of sha1 value, I thought it was string,
sorry.

Thanks,
Yuan
-- 
sheepdog mailing list
[email protected]
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to