F-5268: honor caller-supplied size in WolfSSLSession useCertificateChainBufferFormat

pull/405/head
Chris Conlon 2026-08-20 12:55:21 -06:00
parent d2e03ee83a
commit d776cd8a7b
2 changed files with 23 additions and 6 deletions

View File

@ -3904,21 +3904,22 @@ JNIEXPORT jint JNICALL Java_com_wolfssl_WolfSSLSession_useCertificateChainBuffer
{
int ret = WOLFSSL_FAILURE;
byte* buff = NULL;
word32 buffSz = 0;
WOLFSSL* ssl = (WOLFSSL*)(uintptr_t)sslPtr;
(void)jcl;
(void)sz;
if (jenv == NULL || ssl == NULL || in == NULL) {
return (jint)BAD_FUNC_ARG;
}
buff = (byte*)(*jenv)->GetByteArrayElements(jenv, in, NULL);
buffSz = (*jenv)->GetArrayLength(jenv, in);
if (sz <= 0 || sz > (jlong)(*jenv)->GetArrayLength(jenv, in)) {
return (jint)BAD_FUNC_ARG;
}
if (buff != NULL && buffSz > 0) {
buff = (byte*)(*jenv)->GetByteArrayElements(jenv, in, NULL);
if (buff != NULL) {
ret = wolfSSL_use_certificate_chain_buffer_format(
ssl, buff, buffSz, format);
ssl, buff, (long)sz, format);
}
if (buff != NULL) {

View File

@ -288,6 +288,9 @@ public class WolfSSLSessionTest {
ssl.usePrivateKeyBuffer(null, 0, WolfSSL.SSL_FILETYPE_PEM));
assertEquals(WolfSSL.BAD_FUNC_ARG,
ssl.useCertificateChainBuffer(null, 0));
assertEquals(WolfSSL.BAD_FUNC_ARG,
ssl.useCertificateChainBufferFormat(null, 0,
WolfSSL.SSL_FILETYPE_PEM));
ssl.freeSSL();
/* correct sz loads, zero/oversized rejected, sub-array (sz < len)
@ -328,6 +331,19 @@ public class WolfSSLSessionTest {
assertEquals(WolfSSL.BAD_FUNC_ARG,
ssl.useCertificateChainBuffer(certPem, certBadSz));
ssl.freeSSL();
/* useCertificateChainBufferFormat: correct sz loads, others rejected */
ssl = new WolfSSLSession(ctx);
assertUseBufferOk("useCertificateChainBufferFormat",
ssl.useCertificateChainBufferFormat(certPem, certPem.length,
WolfSSL.SSL_FILETYPE_PEM));
assertEquals(WolfSSL.BAD_FUNC_ARG,
ssl.useCertificateChainBufferFormat(certPem, 0,
WolfSSL.SSL_FILETYPE_PEM));
assertEquals(WolfSSL.BAD_FUNC_ARG,
ssl.useCertificateChainBufferFormat(certPem, certBadSz,
WolfSSL.SSL_FILETYPE_PEM));
ssl.freeSSL();
}
class TestPskClientCb implements WolfSSLPskClientCallback