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;