@@ -657,17 +657,25 @@ static int DNS_to_GENERAL_NAME(WOLFSSL_GENERAL_NAME* gn, DNS_entry* dns)
657657 if (gn->d.registeredID == NULL) {
658658 return WOLFSSL_FAILURE;
659659 }
660- gn -> d .registeredID -> obj = (const unsigned char * )XMALLOC (dns -> len ,
661- gn -> d .registeredID -> heap , DYNAMIC_TYPE_ASN1 );
662- if (gn -> d .registeredID -> obj == NULL ) {
663- /* registeredID gets free'd up by caller after failure */
664- return WOLFSSL_FAILURE ;
660+ {
661+ /* Store DER-encoded OID (tag + length + content) in obj */
662+ word32 derSz = 1 + SetLength(dns->len, NULL) + dns->len;
663+ byte* der = (byte*)XMALLOC(derSz,
664+ gn->d.registeredID->heap, DYNAMIC_TYPE_ASN1);
665+ if (der == NULL) {
666+ return WOLFSSL_FAILURE;
667+ }
668+ {
669+ word32 idx = 0;
670+ der[idx++] = ASN_OBJECT_ID;
671+ idx += SetLength(dns->len, der + idx);
672+ XMEMCPY(der + idx, dns->name, dns->len);
673+ }
674+ gn->d.registeredID->obj = der;
675+ gn->d.registeredID->objSz = derSz;
665676 }
666677 gn->d.registeredID->dynamic |= WOLFSSL_ASN1_DYNAMIC_DATA;
667- XMEMCPY ((byte * )gn -> d .registeredID -> obj , dns -> ridString , dns -> len );
668- gn -> d .registeredID -> objSz = dns -> len ;
669678 gn->d.registeredID->grp = oidCertExtType;
670- gn -> d .registeredID -> nid = WC_NID_registeredAddress ;
671679 break;
672680#endif
673681
@@ -2529,19 +2537,28 @@ void* wolfSSL_X509_get_ext_d2i(const WOLFSSL_X509* x509, int nid, int* c,
25292537 if (gn->d.registeredID == NULL) {
25302538 goto err;
25312539 }
2532- gn -> d .registeredID -> obj =
2533- (const unsigned char * )XMALLOC (dns -> len ,
2534- gn -> d .registeredID -> heap , DYNAMIC_TYPE_ASN1 );
2535- if (gn -> d .registeredID -> obj == NULL ) {
2536- goto err ;
2540+ {
2541+ /* Store DER-encoded OID (tag+length+content) */
2542+ word32 derSz = 1 + SetLength(dns->len, NULL)
2543+ + dns->len;
2544+ byte* der = (byte*)XMALLOC(derSz,
2545+ gn->d.registeredID->heap,
2546+ DYNAMIC_TYPE_ASN1);
2547+ if (der == NULL) {
2548+ goto err;
2549+ }
2550+ {
2551+ word32 derIdx = 0;
2552+ der[derIdx++] = ASN_OBJECT_ID;
2553+ derIdx += SetLength(dns->len, der + derIdx);
2554+ XMEMCPY(der + derIdx, dns->name, dns->len);
2555+ }
2556+ gn->d.registeredID->obj = der;
2557+ gn->d.registeredID->objSz = derSz;
25372558 }
25382559 gn->d.registeredID->dynamic |=
25392560 WOLFSSL_ASN1_DYNAMIC_DATA;
2540- XMEMCPY ((byte * )gn -> d .registeredID -> obj ,
2541- dns -> ridString , dns -> len );
2542- gn -> d .registeredID -> objSz = dns -> len ;
25432561 gn->d.registeredID->grp = oidCertExtType;
2544- gn -> d .registeredID -> nid = WC_NID_registeredAddress ;
25452562 break;
25462563 #endif /* WOLFSSL_RID_ALT_NAME */
25472564
0 commit comments