diff --git a/pclsync/pssl.c b/pclsync/pssl.c index 1a7a638..b05b71a 100644 --- a/pclsync/pssl.c +++ b/pclsync/pssl.c @@ -620,6 +620,13 @@ static void trim_der_key(unsigned char *keydata, size_t *keylen) { } header_size = p - keydata; correct_len = header_size + len; + if (correct_len > *keylen) { + pdbg_logf(D_ERROR, "ASN.1 length %zu exceeds buffer size %zu", correct_len, *keylen); + return; + } + if (correct_len > *keylen) { + return; + } trimmed = malloc(correct_len); if (!trimmed) return; memcpy(trimmed, keydata, correct_len);