@@ -749,23 +749,26 @@ namespace pcpp
749749 m_SubjectOffset = currIndex++;
750750 m_SubjectPublicKeyInfoOffset = currIndex++;
751751
752- record = root->getSubRecords ().at (currIndex);
753-
754- if (record->getTagClass () == Asn1TagClass::ContextSpecific && record->getTagType () == 1 )
752+ if (root->getSubRecords ().size () > static_cast <size_t >(currIndex))
755753 {
756- m_IssuerUniqueID = currIndex++;
757754 record = root->getSubRecords ().at (currIndex);
758- }
759755
760- if (record->getTagClass () == Asn1TagClass::ContextSpecific && record->getTagType () == 2 )
761- {
762- m_SubjectUniqueID = currIndex++;
763- record = root->getSubRecords ().at (currIndex);
764- }
765-
766- if (X509Extensions::isValidExtensionsRecord (record))
767- {
768- m_ExtensionsOffset = currIndex++;
756+ if (record->getTagClass () == Asn1TagClass::ContextSpecific && record->getTagType () == 1 )
757+ {
758+ m_IssuerUniqueID = currIndex++;
759+ record = root->getSubRecords ().at (currIndex);
760+ }
761+
762+ if (record->getTagClass () == Asn1TagClass::ContextSpecific && record->getTagType () == 2 )
763+ {
764+ m_SubjectUniqueID = currIndex++;
765+ record = root->getSubRecords ().at (currIndex);
766+ }
767+
768+ if (X509Extensions::isValidExtensionsRecord (record))
769+ {
770+ m_ExtensionsOffset = currIndex++;
771+ }
769772 }
770773 }
771774 catch (const std::out_of_range&)
@@ -788,25 +791,25 @@ namespace pcpp
788791
789792 X509Name X509TBSCertificate::getIssuer () const
790793 {
791- auto root = getSubRecordAndCast<Asn1SequenceRecord>(m_Root, getIndex ( m_IssuerOffset) , " Issuer" );
794+ auto root = getSubRecordAndCast<Asn1SequenceRecord>(m_Root, m_IssuerOffset, " Issuer" );
792795 return X509Name (root);
793796 }
794797
795798 X509Validity X509TBSCertificate::getValidity () const
796799 {
797- auto root = getSubRecordAndCast<Asn1SequenceRecord>(m_Root, getIndex ( m_ValidityOffset) , " Validity" );
800+ auto root = getSubRecordAndCast<Asn1SequenceRecord>(m_Root, m_ValidityOffset, " Validity" );
798801 return X509Validity (root);
799802 }
800803
801804 X509Name X509TBSCertificate::getSubject () const
802805 {
803- auto root = getSubRecordAndCast<Asn1SequenceRecord>(m_Root, getIndex ( m_SubjectOffset) , " Subject" );
806+ auto root = getSubRecordAndCast<Asn1SequenceRecord>(m_Root, m_SubjectOffset, " Subject" );
804807 return X509Name (root);
805808 }
806809
807810 X509SubjectPublicKeyInfo X509TBSCertificate::getSubjectPublicKeyInfo () const
808811 {
809- auto root = getSubRecordAndCast<Asn1SequenceRecord>(m_Root, getIndex ( m_SubjectPublicKeyInfoOffset) ,
812+ auto root = getSubRecordAndCast<Asn1SequenceRecord>(m_Root, m_SubjectPublicKeyInfoOffset,
810813 " Subject Public Key Info" );
811814 return X509SubjectPublicKeyInfo (root);
812815 }
@@ -818,7 +821,7 @@ namespace pcpp
818821 return nullptr ;
819822 }
820823
821- auto root = getSubRecordAndCast<Asn1ConstructedRecord>(m_Root, getIndex ( m_ExtensionsOffset) , " Extensions" );
824+ auto root = getSubRecordAndCast<Asn1ConstructedRecord>(m_Root, m_ExtensionsOffset, " Extensions" );
822825 return std::unique_ptr<X509Extensions>(new X509Extensions (root));
823826 }
824827
@@ -1015,9 +1018,13 @@ namespace pcpp
10151018 {
10161019 if (!m_ExtensionsParsed)
10171020 {
1018- for (const auto & extension : m_TBSCertificate.getExtensions ()->getExtensions ())
1021+ auto extensions = m_TBSCertificate.getExtensions ();
1022+ if (extensions != nullptr )
10191023 {
1020- m_Extensions.emplace_back (X509Extension (extension));
1024+ for (const auto & extension : extensions->getExtensions ())
1025+ {
1026+ m_Extensions.emplace_back (X509Extension (extension));
1027+ }
10211028 }
10221029 m_ExtensionsParsed = true ;
10231030 }
0 commit comments