Skip to content

Commit

Permalink
fix: issue while parsing certificates in some PE files
Browse files Browse the repository at this point in the history
  • Loading branch information
plusvic committed May 4, 2024
1 parent 9d9b01d commit d7c5181
Show file tree
Hide file tree
Showing 4 changed files with 909 additions and 15 deletions.
19 changes: 8 additions & 11 deletions lib/src/modules/pe/asn1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,16 @@ use array_bytes::bytes2hex;
use const_oid::db::{rfc4519, rfc5912};
use const_oid::ObjectIdentifier;

use der_parser::asn1_rs::{Any, FromBer, FromDer, OptTaggedParser};
use der_parser::asn1_rs::{
Any, FromBer, FromDer, OptTaggedParser, ParseResult,
};
use der_parser::ber::*;
use der_parser::error::Error::BerValueError;
use der_parser::error::{BerError, BerResult};
use der_parser::nom;
use der_parser::nom::branch::alt;
use der_parser::nom::combinator::{consumed, map_res};
use der_parser::nom::Err::Incomplete;
use der_parser::nom::IResult;
use der_parser::nom::Parser;
use der_parser::num_bigint::BigUint;
use der_parser::{asn1_rs, parse_ber, Oid};
Expand All @@ -21,7 +22,6 @@ use digest::Digest;
use sha1::Sha1;

use x509_parser::certificate::X509Certificate;
use x509_parser::error::X509Error;
use x509_parser::prelude::{AlgorithmIdentifier, X509CertificateParser};
use x509_parser::x509::X509Name;

Expand Down Expand Up @@ -204,8 +204,8 @@ impl<'a> SignedData<'a> {
let (remainder, content_info) = ContentInfo::parse(remainder)?;

let (remainder, certificates) = OptTaggedParser::from(0)
.parse_ber(remainder, |_, raw_certs| {
Self::parse_certificates(raw_certs)
.parse_ber(remainder, |_, raw_certs| -> ParseResult<'_, Vec<_>> {
Ok(Self::parse_certificates(raw_certs))
})
.map_err(|_| BerValueError)?;

Expand All @@ -227,9 +227,7 @@ impl<'a> SignedData<'a> {
))
}

fn parse_certificates(
input: &[u8],
) -> IResult<&[u8], Vec<Certificate>, X509Error> {
fn parse_certificates(input: &[u8]) -> (&[u8], Vec<Certificate>) {
let mut remainder = input;
let mut certificates = Vec::new();

Expand All @@ -247,10 +245,9 @@ impl<'a> SignedData<'a> {
});
remainder
}
Err(Incomplete(_)) => {
return Ok((remainder, certificates));
Err(_) => {
return (remainder, certificates);
}
Err(err) => return Err(err),
}
}
}
Expand Down
Binary file not shown.
Loading

0 comments on commit d7c5181

Please sign in to comment.