From 18c5d1f771172aa1c532553d49de48242d4434ec Mon Sep 17 00:00:00 2001
From: Steven Fackler <sfackler@palantir.com>
Date: Mon, 7 Nov 2016 20:50:57 +0000
Subject: [PATCH] Add init calls to new constructors

---
 openssl/src/conf.rs     |  5 ++++-
 openssl/src/stack.rs    |  2 ++
 openssl/src/x509/mod.rs | 14 ++++++++++++--
 3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/openssl/src/conf.rs b/openssl/src/conf.rs
index 140c18172..5483955de 100644
--- a/openssl/src/conf.rs
+++ b/openssl/src/conf.rs
@@ -7,7 +7,10 @@ pub struct ConfMethod(*mut ffi::CONF_METHOD);
 
 impl ConfMethod {
     pub fn default() -> ConfMethod {
-        unsafe { ConfMethod(ffi::NCONF_default()) }
+        unsafe {
+            ffi::init();
+            ConfMethod(ffi::NCONF_default())
+        }
     }
 
     pub unsafe fn from_ptr(ptr: *mut ffi::CONF_METHOD) -> ConfMethod {
diff --git a/openssl/src/stack.rs b/openssl/src/stack.rs
index 87aa86c50..584ead8c5 100644
--- a/openssl/src/stack.rs
+++ b/openssl/src/stack.rs
@@ -5,6 +5,7 @@ use std::convert::AsRef;
 use std::marker::PhantomData;
 use libc::c_int;
 use std::mem;
+use ffi;
 
 use {cvt, cvt_p};
 use error::ErrorStack;
@@ -37,6 +38,7 @@ pub struct Stack<T: Stackable>(*mut T::StackType);
 impl<T: Stackable> Stack<T> {
     pub fn new() -> Result<Stack<T>, ErrorStack> {
         unsafe {
+            ffi::init();
             let ptr = try!(cvt_p(OPENSSL_sk_new_null()));
             Ok(Stack(ptr as *mut _))
         }
diff --git a/openssl/src/x509/mod.rs b/openssl/src/x509/mod.rs
index 97d9fa3fa..af79ffbb2 100644
--- a/openssl/src/x509/mod.rs
+++ b/openssl/src/x509/mod.rs
@@ -360,6 +360,7 @@ pub struct X509Builder(X509);
 impl X509Builder {
     pub fn new() -> Result<X509Builder, ErrorStack> {
         unsafe {
+            ffi::init();
             cvt_p(ffi::X509_new()).map(|p| X509Builder(X509(p)))
         }
     }
@@ -610,6 +611,7 @@ impl X509Extension {
         let name = CString::new(name).unwrap();
         let value = CString::new(value).unwrap();
         unsafe {
+            ffi::init();
             let conf = conf.map_or(ptr::null_mut(), ConfRef::as_ptr);
             let context = context.map_or(ptr::null_mut(), X509v3Context::as_ptr);
             let name = name.as_ptr() as *mut _;
@@ -626,6 +628,7 @@ impl X509Extension {
                    -> Result<X509Extension, ErrorStack> {
         let value = CString::new(value).unwrap();
         unsafe {
+            ffi::init();
             let conf = conf.map_or(ptr::null_mut(), ConfRef::as_ptr);
             let context = context.map_or(ptr::null_mut(), X509v3Context::as_ptr);
             let name = name.as_raw();
@@ -640,7 +643,10 @@ pub struct X509NameBuilder(X509Name);
 
 impl X509NameBuilder {
     pub fn new() -> Result<X509NameBuilder, ErrorStack> {
-        unsafe { cvt_p(ffi::X509_NAME_new()).map(|p| X509NameBuilder(X509Name(p))) }
+        unsafe {
+            ffi::init();
+            cvt_p(ffi::X509_NAME_new()).map(|p| X509NameBuilder(X509Name(p)))
+        }
     }
 
     pub fn append_entry_by_text(&mut self, field: &str, value: &str) -> Result<(), ErrorStack> {
@@ -751,7 +757,11 @@ pub struct X509ReqBuilder(X509Req);
 
 impl X509ReqBuilder {
     pub fn new() -> Result<X509ReqBuilder, ErrorStack> {
-        unsafe { cvt_p(ffi::X509_REQ_new()).map(|p| X509ReqBuilder(X509Req(p))) }
+        unsafe {
+            ffi::init();
+            cvt_p(ffi::X509_REQ_new()).map(|p| X509ReqBuilder(X509Req(p)))
+        }
+
     }
 
     pub fn set_version(&mut self, version: i32) -> Result<(), ErrorStack> {
-- 
GitLab