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;
|