Skip to content

Commit 0c39b80

Browse files
Merge pull request #6654 from lealem47/zd16475
Fix of buffer overflow in GenerateDNSEntryRIDString()
2 parents 1da000b + 9cade8c commit 0c39b80

1 file changed

Lines changed: 14 additions & 13 deletions

File tree

wolfcrypt/src/asn.c

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12988,7 +12988,6 @@ static int GenerateDNSEntryRIDString(DNS_entry* entry, void* heap)
1298812988
{
1298912989
int i, j, ret = 0;
1299012990
int nameSz = 0;
12991-
int numerical = 0;
1299212991
int nid = 0;
1299312992
int tmpSize = MAX_OID_SZ;
1299412993
word32 oid = 0;
@@ -13019,18 +13018,23 @@ static int GenerateDNSEntryRIDString(DNS_entry* entry, void* heap)
1301913018
ret = DecodeObjectId((const byte*)(entry->name),(word32)entry->len,
1302013019
tmpName, (word32*)&tmpSize);
1302113020

13022-
numerical = 1;
1302313021
if (ret == 0) {
1302413022
j = 0;
1302513023
/* Append each number of dotted form. */
1302613024
for (i = 0; i < tmpSize; i++) {
13027-
ret = XSNPRINTF(oidName + j, MAX_OID_SZ, "%d", tmpName[i]);
13025+
if (j > MAX_OID_SZ) {
13026+
return BUFFER_E;
13027+
}
13028+
13029+
if (i < tmpSize - 1) {
13030+
ret = XSNPRINTF(oidName + j, MAX_OID_SZ - j, "%d.", tmpName[i]);
13031+
}
13032+
else {
13033+
ret = XSNPRINTF(oidName + j, MAX_OID_SZ - j, "%d", tmpName[i]);
13034+
}
13035+
1302813036
if (ret >= 0) {
1302913037
j += ret;
13030-
if (i < tmpSize - 1) {
13031-
oidName[j] = '.';
13032-
j++;
13033-
}
1303413038
}
1303513039
else {
1303613040
return BUFFER_E;
@@ -13044,18 +13048,15 @@ static int GenerateDNSEntryRIDString(DNS_entry* entry, void* heap)
1304413048
if (ret == 0) {
1304513049
nameSz = (int)XSTRLEN((const char*)finalName);
1304613050

13047-
entry->ridString = (char*)XMALLOC(nameSz + numerical, heap,
13048-
DYNAMIC_TYPE_ALTNAME);
13051+
entry->ridString = (char*)XMALLOC(nameSz + 1, heap,
13052+
DYNAMIC_TYPE_ALTNAME);
1304913053

1305013054
if (entry->ridString == NULL) {
1305113055
ret = MEMORY_E;
1305213056
}
1305313057

1305413058
if (ret == 0) {
13055-
XMEMCPY(entry->ridString, finalName, nameSz);
13056-
if (numerical) {
13057-
entry->ridString[nameSz] = '\0';
13058-
}
13059+
XMEMCPY(entry->ridString, finalName, nameSz + 1);
1305913060
}
1306013061
}
1306113062

0 commit comments

Comments
 (0)