Peter Stuge <[email protected]> writes:

> [email protected] wrote:
>> +++ b/src/userauth.c
>> @@ -628,6 +628,7 @@ sign_fromfile(LIBSSH2_SESSION *session, unsigned char 
>> **sig, size_t *sig_len,
...
>> +    unsigned long _sig_len;
...
>> -    if (privkeyobj->signv(session, sig, sig_len, 1, &datavec,
>> +    if (privkeyobj->signv(session, sig, &_sig_len, 1, &datavec,
>>                            &hostkey_abstract)) {
>>          if (privkeyobj->dtor) {
>>              privkeyobj->dtor(session, abstract);
>>          }
>>          return -1;
>>      }
>> +    *sig_len = _sig_len;
>
> Could this have been solved with a cast?

Indeed, I was just worried about the case: sizeof(size_t) == 8 and
sizeof(unsigned long) == 4 (i.e. on Windows 64), *sig_len is not
properly initialized by the caller, then the upper(lower?) 4-bytes of
*sig_len will be unchanged.

But in the above case, the caller is userauth_publickey(), *sig_len
must be initialized properly :) Will fix soon.

Is there any recommendation on size_t/ssize_t/unsigned long usage?

Regards,
-- 
Daiki Ueno
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

Reply via email to