Fix crash when re-making certificates after deleting existing ones (#690).
authorCarl Hetherington <cth@carlh.net>
Tue, 15 Sep 2015 18:40:24 +0000 (19:40 +0100)
committerCarl Hetherington <cth@carlh.net>
Tue, 15 Sep 2015 18:40:24 +0000 (19:40 +0100)
ChangeLog
cscript
src/wx/config_dialog.cc

index 569ea9e8d9874435266b7391f5249cc6cab1decf..916d84038d184e11f38cc093bfb47425923c891a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-09-15  Carl Hetherington  <cth@carlh.net>
+
+       * Fix crash on re-making certificate chains
+       after removing all existing certificates (#690).
+
 2015-09-15  c.hetherington  <cth@carlh.net>
 
        * Fix failure to display audio analysis
diff --git a/cscript b/cscript
index 143cf45e190fe83361ebb052c651ba4109d32d5e..4adf08eab09fde077087e346c97ffc893cbf865c 100644 (file)
--- a/cscript
+++ b/cscript
@@ -246,8 +246,8 @@ def dependencies(target):
         ffmpeg_options = {}
 
     return (('ffmpeg-cdist', '0e27b2b', ffmpeg_options),
-            ('libdcp', 'v1.2.4'),
-            ('libsub', 'v1.1.5'))
+            ('libdcp', '0c8b5b4'),
+            ('libsub', 'd3f7e0c'))
 
 def configure_options(target):
     opt = ''
index 81fffbbbc457c3158019867f31b110f1bdf14b2b..15d64b902f42eb57951f84c5f1bc658e5546f0c9 100644 (file)
@@ -794,9 +794,28 @@ private:
        {
                shared_ptr<const dcp::CertificateChain> chain = _get ();
 
+               string subject_organization_name;
+               string subject_organizational_unit_name;
+               string root_common_name;
                string intermediate_common_name;
-               if (chain->root_to_leaf().size() >= 3) {
-                       dcp::CertificateChain::List all = chain->root_to_leaf ();
+               string leaf_common_name;
+
+               dcp::CertificateChain::List all = chain->root_to_leaf ();
+
+               if (all.size() >= 1) {
+                       /* Have a root */
+                       subject_organization_name = chain->root().subject_organization_name ();
+                       subject_organizational_unit_name = chain->root().subject_organizational_unit_name ();
+                       root_common_name = chain->root().subject_common_name ();
+               }
+
+               if (all.size() >= 2) {
+                       /* Have a leaf */
+                       leaf_common_name = chain->leaf().subject_common_name ();
+               }
+
+               if (all.size() >= 3) {
+                       /* Have an intermediate */
                        dcp::CertificateChain::List::iterator i = all.begin ();
                        ++i;
                        intermediate_common_name = i->subject_common_name ();
@@ -804,11 +823,11 @@ private:
 
                MakeChainDialog* d = new MakeChainDialog (
                        this,
-                       chain->root().subject_organization_name (),
-                       chain->root().subject_organizational_unit_name (),
-                       chain->root().subject_common_name (),
+                       subject_organization_name,
+                       subject_organizational_unit_name,
+                       root_common_name,
                        intermediate_common_name,
-                       chain->leaf().subject_common_name ()
+                       leaf_common_name
                        );
 
                if (d->ShowModal () == wxID_OK) {