Title: [237415] trunk/Source/WebKit
Revision
237415
Author
[email protected]
Date
2018-10-25 08:55:35 -0700 (Thu, 25 Oct 2018)

Log Message

[WPE][GTK] Follow-up fixes to the certificate coders
https://bugs.webkit.org/show_bug.cgi?id=190900

Reviewed by Michael Catanzaro.

Cleanup the GRefPtr mess I created earlier. Also we now bail out
if any certificate in the chain has no data instead of returning a
cropped chain.

* Shared/soup/WebCoreArgumentCodersSoup.cpp:
(IPC::ArgumentCoder<CertificateInfo>::encode):
(IPC::ArgumentCoder<CertificateInfo>::decode):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (237414 => 237415)


--- trunk/Source/WebKit/ChangeLog	2018-10-25 14:53:09 UTC (rev 237414)
+++ trunk/Source/WebKit/ChangeLog	2018-10-25 15:55:35 UTC (rev 237415)
@@ -1,3 +1,18 @@
+2018-10-25  Claudio Saavedra  <[email protected]>
+
+        [WPE][GTK] Follow-up fixes to the certificate coders
+        https://bugs.webkit.org/show_bug.cgi?id=190900
+
+        Reviewed by Michael Catanzaro.
+
+        Cleanup the GRefPtr mess I created earlier. Also we now bail out
+        if any certificate in the chain has no data instead of returning a
+        cropped chain.
+
+        * Shared/soup/WebCoreArgumentCodersSoup.cpp:
+        (IPC::ArgumentCoder<CertificateInfo>::encode):
+        (IPC::ArgumentCoder<CertificateInfo>::decode):
+
 2018-10-25  Zan Dobersek  <[email protected]>
 
         [GTK][AC] Resizing the window doesn't always update the visible rect

Modified: trunk/Source/WebKit/Shared/soup/WebCoreArgumentCodersSoup.cpp (237414 => 237415)


--- trunk/Source/WebKit/Shared/soup/WebCoreArgumentCodersSoup.cpp	2018-10-25 14:53:09 UTC (rev 237414)
+++ trunk/Source/WebKit/Shared/soup/WebCoreArgumentCodersSoup.cpp	2018-10-25 15:55:35 UTC (rev 237415)
@@ -51,25 +51,25 @@
 
 void ArgumentCoder<CertificateInfo>::encode(Encoder& encoder, const CertificateInfo& certificateInfo)
 {
-    if (!certificateInfo.certificate()) {
+    auto* certificate = certificateInfo.certificate();
+    if (!certificate) {
         encoder << 0;
         return;
     }
 
-    GTlsCertificate* certificate = certificateInfo.certificate();
     Vector<GRefPtr<GByteArray>> certificatesDataList;
-    do {
+    for (; certificate; certificate = g_tls_certificate_get_issuer(certificate)) {
         GByteArray* certificateData = nullptr;
         g_object_get(G_OBJECT(certificate), "certificate", &certificateData, nullptr);
 
-        if (!certificateData)
+        if (!certificateData) {
+            certificatesDataList.clear();
             break;
+        }
 
-        certificatesDataList.append(certificateData);
+        certificatesDataList.append(adoptGRef(certificateData));
+    }
 
-        certificate = g_tls_certificate_get_issuer(certificate);
-    } while (certificate);
-
     encoder << static_cast<uint32_t>(certificatesDataList.size());
 
     if (certificatesDataList.isEmpty())
@@ -77,7 +77,7 @@
 
     // Encode starting from the root certificate.
     for (size_t i = certificatesDataList.size(); i > 0; --i) {
-        auto& certificate = certificatesDataList[i - 1];
+        GByteArray* certificate = certificatesDataList[i - 1].get();
         encoder.encodeVariableLengthByteArray(IPC::DataReference(certificate->data, certificate->len));
     }
 
@@ -100,11 +100,11 @@
         if (!decoder.decodeVariableLengthByteArray(certificateDataReference))
             return false;
 
-        GRefPtr<GByteArray> certificateData = g_byte_array_sized_new(certificateDataReference.size());
-        certificateData = g_byte_array_append(certificateData.get(), certificateDataReference.data(), certificateDataReference.size());
+        GByteArray* certificateData = g_byte_array_sized_new(certificateDataReference.size());
+        GRefPtr<GByteArray> certificateBytes = adoptGRef(g_byte_array_append(certificateData, certificateDataReference.data(), certificateDataReference.size()));
 
         certificate = adoptGRef(G_TLS_CERTIFICATE(g_initable_new(
-            certificateType, nullptr, nullptr, "certificate", certificateData.get(), "issuer", certificate.get(), nullptr)));
+            certificateType, nullptr, nullptr, "certificate", certificateBytes.get(), "issuer", certificate.get(), nullptr)));
     }
 
     uint32_t tlsErrors;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to