[shotwell] piwigo: Do not crash on empty certificate



commit 970e6fdbcc9f3ca58066228978a2e3725877f8a7
Author: Jens Georg <mail jensge org>
Date:   Fri May 31 19:21:21 2019 +0200

    piwigo: Do not crash on empty certificate
    
    Apparently there are cases where SoupMessage.get_https_status() does not
    return a certificate. In that case, do not show the detail button.
    
    Fixes #134

 plugins/shotwell-publishing/PiwigoPublishing.vala | 48 ++++++++++++-----------
 1 file changed, 26 insertions(+), 22 deletions(-)
---
diff --git a/plugins/shotwell-publishing/PiwigoPublishing.vala 
b/plugins/shotwell-publishing/PiwigoPublishing.vala
index 649f1358..f1777898 100644
--- a/plugins/shotwell-publishing/PiwigoPublishing.vala
+++ b/plugins/shotwell-publishing/PiwigoPublishing.vala
@@ -1010,7 +1010,7 @@ internal class SSLErrorPane : Shotwell.Plugins.Common.BuilderPane {
 
     public signal void proceed ();
     public string host { owned get; construct; }
-    public TlsCertificate cert { private get; construct; }
+    public TlsCertificate? cert { private get; construct; }
     public string error_text { owned get; construct; }
 
     public SSLErrorPane (SessionLoginTransaction transaction,
@@ -1037,28 +1037,32 @@ internal class SSLErrorPane : Shotwell.Plugins.Common.BuilderPane {
         label.set_text (error_text);
 
         var info = this.get_builder ().get_object ("default") as Gtk.Button;
-        info.clicked.connect (() => {
-            var simple_cert = new Gcr.SimpleCertificate (cert.certificate.data);
-            var widget = new Gcr.CertificateWidget (simple_cert);
-            bool use_header = true;
-            Gtk.Settings.get_default ().get ("gtk-dialogs-use-header", out use_header);
-            var flags = (Gtk.DialogFlags) 0;
-            if (use_header) {
-                flags |= Gtk.DialogFlags.USE_HEADER_BAR;
-            }
+        if (cert != null) {
+            info.clicked.connect (() => {
+                var simple_cert = new Gcr.SimpleCertificate (cert.certificate.data);
+                var widget = new Gcr.CertificateWidget (simple_cert);
+                bool use_header = true;
+                Gtk.Settings.get_default ().get ("gtk-dialogs-use-header", out use_header);
+                var flags = (Gtk.DialogFlags) 0;
+                if (use_header) {
+                    flags |= Gtk.DialogFlags.USE_HEADER_BAR;
+                }
 
-            var dialog = new Gtk.Dialog.with_buttons (
-                            _("Certificate of %s").printf (host),
-                            null,
-                            flags,
-                            _("_OK"), Gtk.ResponseType.OK);
-            dialog.get_content_area ().add (widget);
-            dialog.set_default_response (Gtk.ResponseType.OK);
-            dialog.set_default_size (640, -1);
-            dialog.show_all ();
-            dialog.run ();
-            dialog.destroy ();
-        });
+                var dialog = new Gtk.Dialog.with_buttons (
+                                _("Certificate of %s").printf (host),
+                                null,
+                                flags,
+                                _("_OK"), Gtk.ResponseType.OK);
+                dialog.get_content_area ().add (widget);
+                dialog.set_default_response (Gtk.ResponseType.OK);
+                dialog.set_default_size (640, -1);
+                dialog.show_all ();
+                dialog.run ();
+                dialog.destroy ();
+            });
+        } else {
+            info.get_parent().remove(info);
+        }
 
         var proceed = this.get_builder ().get_object ("proceed_button") as Gtk.Button;
         proceed.clicked.connect (() => { this.proceed (); });


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]