Don't count null char in better way

This commit is contained in:
Juliusz Sosinowicz
2019-11-07 11:41:46 +01:00
parent 7c1a1dfd1f
commit 944d5e1045
2 changed files with 9 additions and 3 deletions

View File

@@ -39658,24 +39658,24 @@ int wolfSSL_X509_NAME_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509_NAME* name,
if (len == 0 || buf == NULL) if (len == 0 || buf == NULL)
return WOLFSSL_FAILURE; return WOLFSSL_FAILURE;
tmpSz = str->length + len + 2; /* + 2 for '=' and null char */ tmpSz = str->length + len + 2; /* + 2 for '=' and comma */
if (tmpSz > ASN_NAME_MAX) { if (tmpSz > ASN_NAME_MAX) {
WOLFSSL_MSG("Size greater than ASN_NAME_MAX"); WOLFSSL_MSG("Size greater than ASN_NAME_MAX");
return WOLFSSL_FAILURE; return WOLFSSL_FAILURE;
} }
if (i < count - 1) { if (i < count - 1) {
/* tmpSz+1 for last null char */
XSNPRINTF(tmp, tmpSz+1, "%s=%s,", buf, str->data); XSNPRINTF(tmp, tmpSz+1, "%s=%s,", buf, str->data);
XSTRNCAT(fullName, tmp, tmpSz); XSTRNCAT(fullName, tmp, tmpSz);
} }
else { else {
XSNPRINTF(tmp, tmpSz, "%s=%s", buf, str->data); XSNPRINTF(tmp, tmpSz, "%s=%s", buf, str->data);
XSTRNCAT(fullName, tmp, tmpSz-1); XSTRNCAT(fullName, tmp, tmpSz-1);
tmpSz--; /* Don't include null char in tmpSz */
} }
totalSz += tmpSz; totalSz += tmpSz;
} }
if (totalSz > 0 && fullName[totalSz-1] == '\0')
totalSz--;
if (wolfSSL_BIO_write(bio, fullName, totalSz) != totalSz) if (wolfSSL_BIO_write(bio, fullName, totalSz) != totalSz)
return WOLFSSL_FAILURE; return WOLFSSL_FAILURE;
return WOLFSSL_SUCCESS; return WOLFSSL_SUCCESS;

View File

@@ -4351,6 +4351,7 @@ static void test_wolfSSL_X509_NAME_get_entry(void)
ASN1_STRING* asn; ASN1_STRING* asn;
int idx; int idx;
ASN1_OBJECT *object = NULL; ASN1_OBJECT *object = NULL;
BIO* bio;
#ifndef NO_FILESYSTEM #ifndef NO_FILESYSTEM
x509 = wolfSSL_X509_load_certificate_file(cliCertFile, WOLFSSL_FILETYPE_PEM); x509 = wolfSSL_X509_load_certificate_file(cliCertFile, WOLFSSL_FILETYPE_PEM);
@@ -4373,6 +4374,11 @@ static void test_wolfSSL_X509_NAME_get_entry(void)
idx = X509_NAME_get_index_by_NID(name, NID_commonName, -1); idx = X509_NAME_get_index_by_NID(name, NID_commonName, -1);
AssertIntGE(idx, 0); AssertIntGE(idx, 0);
AssertNotNull(bio = BIO_new(BIO_s_mem()));
AssertIntEQ(X509_NAME_print_ex(bio, name, 4,
(XN_FLAG_RFC2253 & ~XN_FLAG_DN_REV)), WOLFSSL_SUCCESS);
BIO_free(bio);
ne = X509_NAME_get_entry(name, idx); ne = X509_NAME_get_entry(name, idx);
AssertNotNull(ne); AssertNotNull(ne);
AssertNotNull(object = X509_NAME_ENTRY_get_object(ne)); AssertNotNull(object = X509_NAME_ENTRY_get_object(ne));