summaryrefslogtreecommitdiff
path: root/dev-qt/qtbase/files/patch-src_plugins_tls_openssl_qx509_openssl_cpp
blob: 98774980a14e18931ed306387631df0e50c22746 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Index: src/plugins/tls/openssl/qx509_openssl.cpp
--- src/plugins/tls/openssl/qx509_openssl.cpp.orig
+++ src/plugins/tls/openssl/qx509_openssl.cpp
@@ -64,7 +64,12 @@ QMultiMap<QByteArray, QString> mapFromX509Name(X509_NA
         unsigned char *data = nullptr;
         int size = q_ASN1_STRING_to_UTF8(&data, q_X509_NAME_ENTRY_get_data(e));
         info.insert(name, QString::fromUtf8((char*)data, size));
-        q_CRYPTO_free(data, nullptr, 0);
+#if QT_CONFIG(opensslv11) && !defined(LIBRESSL_VERSION_NUMBER)
+         q_CRYPTO_free(data, nullptr, 0);
+#else
+         q_CRYPTO_free(data);
+#endif
+
     }
 
     return info;
@@ -75,11 +80,27 @@ QDateTime dateTimeFromASN1(const ASN1_TIME *aTime)
     QDateTime result;
     tm lTime;
 
+#ifdef LIBRESSL_VERSION_NUMBER
+    const char *data;
+    size_t len;
+    int type;
+
+    data = (const char*)ASN1_STRING_get0_data((const ASN1_STRING *)aTime);
+    len = ASN1_STRING_length(aTime);
+    type = ASN1_STRING_type(aTime);
+
+    if (ASN1_time_parse(data, len, &lTime, type) == type) {
+        QDate resDate(lTime.tm_year + 1900, lTime.tm_mon + 1, lTime.tm_mday);
+        QTime resTime(lTime.tm_hour, lTime.tm_min, lTime.tm_sec);
+        result = QDateTime(resDate, resTime, Qt::UTC);
+    }
+#else
     if (q_ASN1_TIME_to_tm(aTime, &lTime)) {
         QDate resDate(lTime.tm_year + 1900, lTime.tm_mon + 1, lTime.tm_mday);
         QTime resTime(lTime.tm_hour, lTime.tm_min, lTime.tm_sec);
         result = QDateTime(resDate, resTime, QTimeZone::UTC);
     }
+#endif
 
     return result;
 }
@@ -190,7 +211,7 @@ QVariant x509UnknownExtensionToValue(X509_EXTENSION *e
         QVariantList list;
         bool isMap = false;
 
-        for (int j = 0; j < q_SKM_sk_num(val); j++) {
+        for (int j = 0; j < q_SKM_sk_num(CONF_VALUE, val); j++) {
             CONF_VALUE *nval = q_SKM_sk_value(CONF_VALUE, val, j);
             if (nval->name && nval->value) {
                 isMap = true;
@@ -286,7 +307,7 @@ QVariant x509ExtensionToValue(X509_EXTENSION *ext)
             if (!info)
                 return {};
             QVariantMap result;
-            for (int i=0; i < q_SKM_sk_num(info); i++) {
+            for (int i=0; i < q_SKM_sk_num(ACCESS_DESCRIPTION, info); i++) {
                 ACCESS_DESCRIPTION *ad = q_SKM_sk_value(ACCESS_DESCRIPTION, info, i);
 
                 GENERAL_NAME *name = ad->location;