diff --git a/libssh2/src/publickey.c b/libssh2/src/publickey.c index 9c9fa6188..b815921d4 100644 --- a/libssh2/src/publickey.c +++ b/libssh2/src/publickey.c @@ -972,6 +972,7 @@ libssh2_publickey_list_fetch(LIBSSH2_PUBLICKEY * pkey, unsigned long *num_keys, goto err_exit; } list = newlist; + memset(&list[keys], 0, sizeof(list[keys])); } if(pkey->version == 1) { unsigned long comment_len; @@ -1114,6 +1115,11 @@ libssh2_publickey_list_fetch(LIBSSH2_PUBLICKEY * pkey, unsigned long *num_keys, } if(list[keys].num_attrs) { + if(list[keys].num_attrs > 1024) { + _libssh2_error(session, LIBSSH2_ERROR_OUT_OF_BOUNDARY, + "Too many publickey attributes"); + goto err_exit; + } list[keys].attrs = LIBSSH2_ALLOC(session, list[keys].num_attrs *