Advance pointer in wolfSSL_i2d_X509

This commit is contained in:
Juliusz Sosinowicz
2023-10-19 11:35:27 +02:00
parent a3bf7a66a4
commit 8f60fb0053
2 changed files with 32 additions and 1 deletions

View File

@ -7460,6 +7460,7 @@ int wolfSSL_i2d_X509(WOLFSSL_X509* x509, unsigned char** out)
{ {
const unsigned char* der; const unsigned char* der;
int derSz = 0; int derSz = 0;
int advance = 1;
WOLFSSL_ENTER("wolfSSL_i2d_X509"); WOLFSSL_ENTER("wolfSSL_i2d_X509");
@ -7480,10 +7481,14 @@ int wolfSSL_i2d_X509(WOLFSSL_X509* x509, unsigned char** out)
WOLFSSL_LEAVE("wolfSSL_i2d_X509", MEMORY_E); WOLFSSL_LEAVE("wolfSSL_i2d_X509", MEMORY_E);
return MEMORY_E; return MEMORY_E;
} }
advance = 0;
} }
if (out != NULL) if (out != NULL) {
XMEMCPY(*out, der, derSz); XMEMCPY(*out, der, derSz);
if (advance)
*out += derSz;
}
WOLFSSL_LEAVE("wolfSSL_i2d_X509", derSz); WOLFSSL_LEAVE("wolfSSL_i2d_X509", derSz);
return derSz; return derSz;

View File

@ -53016,6 +53016,31 @@ static int test_wolfSSL_X509_load_crl_file(void)
return EXPECT_RESULT(); return EXPECT_RESULT();
} }
static int test_wolfSSL_i2d_X509(void)
{
EXPECT_DECLS;
#if defined(OPENSSL_EXTRA) && defined(USE_CERT_BUFFERS_2048) && !defined(NO_RSA)
const unsigned char* cert_buf = server_cert_der_2048;
unsigned char* out = NULL;
unsigned char* tmp = NULL;
X509* cert = NULL;
ExpectNotNull(d2i_X509(&cert, &cert_buf, sizeof_server_cert_der_2048));
/* Pointer should be advanced */
ExpectPtrGT(cert_buf, server_cert_der_2048);
ExpectIntGT(i2d_X509(cert, &out), 0);
ExpectNotNull(out);
tmp = out;
ExpectIntGT(i2d_X509(cert, &tmp), 0);
ExpectPtrGT(tmp, out);
if (out != NULL)
XFREE(out, NULL, DYNAMIC_TYPE_OPENSSL);
X509_free(cert);
#endif
return EXPECT_RESULT();
}
static int test_wolfSSL_d2i_X509_REQ(void) static int test_wolfSSL_d2i_X509_REQ(void)
{ {
EXPECT_DECLS; EXPECT_DECLS;
@ -67715,6 +67740,7 @@ TEST_CASE testCases[] = {
TEST_DECL(test_wolfSSL_X509_set_version), TEST_DECL(test_wolfSSL_X509_set_version),
TEST_DECL(test_wolfSSL_X509_get_serialNumber), TEST_DECL(test_wolfSSL_X509_get_serialNumber),
TEST_DECL(test_wolfSSL_X509_CRL), TEST_DECL(test_wolfSSL_X509_CRL),
TEST_DECL(test_wolfSSL_i2d_X509),
TEST_DECL(test_wolfSSL_d2i_X509_REQ), TEST_DECL(test_wolfSSL_d2i_X509_REQ),
TEST_DECL(test_wolfSSL_PEM_read_X509), TEST_DECL(test_wolfSSL_PEM_read_X509),
TEST_DECL(test_wolfSSL_X509_check_ca), TEST_DECL(test_wolfSSL_X509_check_ca),