Merge pull request #592 from Byron/master

Fix for len() == isize::max() for stacks that are unallocated
This commit is contained in:
Steven Fackler 2017-03-09 20:28:42 +11:00 committed by GitHub
commit efe96396ad
3 changed files with 19 additions and 1 deletions

View File

@ -42,7 +42,12 @@ impl Pkcs12Ref {
let pkey = PKey::from_ptr(pkey); let pkey = PKey::from_ptr(pkey);
let cert = X509::from_ptr(cert); let cert = X509::from_ptr(cert);
let chain = Stack::from_ptr(chain);
let chain = if chain.is_null() {
try!(Stack::new())
} else {
Stack::from_ptr(chain)
};
Ok(ParsedPkcs12 { Ok(ParsedPkcs12 {
pkey: pkey, pkey: pkey,
@ -80,6 +85,7 @@ impl Pkcs12 {
pub struct ParsedPkcs12 { pub struct ParsedPkcs12 {
pub pkey: PKey, pub pkey: PKey,
pub cert: X509, pub cert: X509,
// FIXME Make this Option<Stack> in the next breaking release
pub chain: Stack<X509>, pub chain: Stack<X509>,
} }
@ -196,6 +202,16 @@ mod test {
"c0cbdf7cdd03c9773e5468e1f6d2da7d5cbb1875"); "c0cbdf7cdd03c9773e5468e1f6d2da7d5cbb1875");
} }
#[test]
fn parse_empty_chain() {
let der = include_bytes!("../test/keystore-empty-chain.p12");
let pkcs12 = Pkcs12::from_der(der).unwrap();
let parsed = pkcs12.parse("cassandra").unwrap();
assert_eq!(parsed.chain.len(), 0);
assert_eq!(parsed.chain.into_iter().collect::<Vec<_>>().len(), 0);
}
#[test] #[test]
fn create() { fn create() {
let subject_name = "ns.example.com"; let subject_name = "ns.example.com";

View File

@ -86,6 +86,8 @@ impl<T: Stackable> ForeignType for Stack<T> {
#[inline] #[inline]
unsafe fn from_ptr(ptr: *mut T::StackType) -> Stack<T> { unsafe fn from_ptr(ptr: *mut T::StackType) -> Stack<T> {
assert!(!ptr.is_null(), "Must not instantiate a Stack from a null-ptr - use Stack::new() in \
that case");
Stack(ptr) Stack(ptr)
} }

Binary file not shown.