@@ -749,23 +749,26 @@ namespace pcpp
749
749
m_SubjectOffset = currIndex++;
750
750
m_SubjectPublicKeyInfoOffset = currIndex++;
751
751
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))
755
753
{
756
- m_IssuerUniqueID = currIndex++;
757
754
record = root->getSubRecords ().at (currIndex);
758
- }
759
755
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
+ }
769
772
}
770
773
}
771
774
catch (const std::out_of_range&)
@@ -788,25 +791,25 @@ namespace pcpp
788
791
789
792
X509Name X509TBSCertificate::getIssuer () const
790
793
{
791
- auto root = getSubRecordAndCast<Asn1SequenceRecord>(m_Root, getIndex ( m_IssuerOffset) , " Issuer" );
794
+ auto root = getSubRecordAndCast<Asn1SequenceRecord>(m_Root, m_IssuerOffset, " Issuer" );
792
795
return X509Name (root);
793
796
}
794
797
795
798
X509Validity X509TBSCertificate::getValidity () const
796
799
{
797
- auto root = getSubRecordAndCast<Asn1SequenceRecord>(m_Root, getIndex ( m_ValidityOffset) , " Validity" );
800
+ auto root = getSubRecordAndCast<Asn1SequenceRecord>(m_Root, m_ValidityOffset, " Validity" );
798
801
return X509Validity (root);
799
802
}
800
803
801
804
X509Name X509TBSCertificate::getSubject () const
802
805
{
803
- auto root = getSubRecordAndCast<Asn1SequenceRecord>(m_Root, getIndex ( m_SubjectOffset) , " Subject" );
806
+ auto root = getSubRecordAndCast<Asn1SequenceRecord>(m_Root, m_SubjectOffset, " Subject" );
804
807
return X509Name (root);
805
808
}
806
809
807
810
X509SubjectPublicKeyInfo X509TBSCertificate::getSubjectPublicKeyInfo () const
808
811
{
809
- auto root = getSubRecordAndCast<Asn1SequenceRecord>(m_Root, getIndex ( m_SubjectPublicKeyInfoOffset) ,
812
+ auto root = getSubRecordAndCast<Asn1SequenceRecord>(m_Root, m_SubjectPublicKeyInfoOffset,
810
813
" Subject Public Key Info" );
811
814
return X509SubjectPublicKeyInfo (root);
812
815
}
@@ -818,7 +821,7 @@ namespace pcpp
818
821
return nullptr ;
819
822
}
820
823
821
- auto root = getSubRecordAndCast<Asn1ConstructedRecord>(m_Root, getIndex ( m_ExtensionsOffset) , " Extensions" );
824
+ auto root = getSubRecordAndCast<Asn1ConstructedRecord>(m_Root, m_ExtensionsOffset, " Extensions" );
822
825
return std::unique_ptr<X509Extensions>(new X509Extensions (root));
823
826
}
824
827
@@ -1015,9 +1018,13 @@ namespace pcpp
1015
1018
{
1016
1019
if (!m_ExtensionsParsed)
1017
1020
{
1018
- for (const auto & extension : m_TBSCertificate.getExtensions ()->getExtensions ())
1021
+ auto extensions = m_TBSCertificate.getExtensions ();
1022
+ if (extensions != nullptr )
1019
1023
{
1020
- m_Extensions.emplace_back (X509Extension (extension));
1024
+ for (const auto & extension : extensions->getExtensions ())
1025
+ {
1026
+ m_Extensions.emplace_back (X509Extension (extension));
1027
+ }
1021
1028
}
1022
1029
m_ExtensionsParsed = true ;
1023
1030
}
0 commit comments