1
0
mirror of https://github.com/Mbed-TLS/mbedtls.git synced 2025-07-29 11:41:15 +03:00

mbedtls_pem_write_buffer: Correctly report needed buffer size for all possible line lengths and counts

Signed-off-by: Jethro Beekman <jethro@fortanix.com>
This commit is contained in:
Jethro Beekman
2023-05-03 14:49:28 +02:00
parent f57273c817
commit 746df88e90
3 changed files with 33 additions and 1 deletions

View File

@ -32,6 +32,35 @@ exit:
}
/* END_CASE */
/* BEGIN_CASE depends_on:MBEDTLS_PEM_WRITE_C */
void mbedtls_pem_write_buffer_lengths()
{
unsigned char data[256] = {};
unsigned char buf[1024];
size_t olen_needed, olen;
int ret;
for (size_t l = 0; l <= sizeof(data); l++) {
ret = mbedtls_pem_write_buffer("\n", "\n", data, l, NULL, 0, &olen_needed);
TEST_ASSERT(ret == MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL);
/* Test that a bigger buffer still only requires `olen_needed` */
ret = mbedtls_pem_write_buffer("\n", "\n", data, l, buf, sizeof(buf), &olen);
TEST_ASSERT(ret == 0);
TEST_ASSERT(olen_needed == olen);
/* Test that a buffer of exactly `olen_needed` works */
memset(buf, 1, sizeof(buf));
ret = mbedtls_pem_write_buffer("\n", "\n", data, l, buf, olen_needed, &olen);
TEST_ASSERT(ret == 0);
TEST_ASSERT(olen_needed == olen);
/* Test the function didn't overflow the given buffer */
for (size_t i = olen_needed; i < sizeof(buf); i++) {
TEST_ASSERT(buf[i] == 1);
}
}
}
/* END_CASE */
/* BEGIN_CASE depends_on:MBEDTLS_PEM_PARSE_C */
void mbedtls_pem_read_buffer(char *header, char *footer, char *data,
char *pwd, int res, data_t *out)