ssl/qsslcertificate.cpp

Switch to Source codePreprocessed file
LineSource CodeCoverage
1 -
2 -
3 -
4 -
5 -
6 -
7 -
8 -
9static QMap<QByteArray, QString> _q_mapFromX509Name(X509_NAME *name); -
10 -
11 -
12 -
13 -
14 -
15 -
16 -
17QSslCertificate::QSslCertificate(QIODevice *device, QSsl::EncodingFormat format) -
18 : d(new QSslCertificatePrivate) -
19{ -
20 QSslSocketPrivate::ensureInitialized(); -
21 if (device)
never evaluated: device
0
22 d->init(device->readAll(), format);
never executed: d->init(device->readAll(), format);
0
23}
never executed: }
0
24 -
25 -
26 -
27 -
28 -
29 -
30 -
31QSslCertificate::QSslCertificate(const QByteArray &data, QSsl::EncodingFormat format) -
32 : d(new QSslCertificatePrivate) -
33{ -
34 QSslSocketPrivate::ensureInitialized(); -
35 d->init(data, format); -
36}
executed: }
Execution Count:9390
9390
37 -
38 -
39 -
40 -
41QSslCertificate::QSslCertificate(const QSslCertificate &other) : d(other.d) -
42{ -
43}
executed: }
Execution Count:1596
1596
44 -
45 -
46 -
47 -
48QSslCertificate::~QSslCertificate() -
49{ -
50} -
51 -
52 -
53 -
54 -
55 -
56QSslCertificate &QSslCertificate::operator=(const QSslCertificate &other) -
57{ -
58 d = other.d; -
59 return *this;
executed: return *this;
Execution Count:559
559
60} -
61bool QSslCertificate::operator==(const QSslCertificate &other) const -
62{ -
63 if (d == other.d)
evaluated: d == other.d
TRUEFALSE
yes
Evaluation Count:15
yes
Evaluation Count:15
15
64 return true;
executed: return true;
Execution Count:15
15
65 if (d->null && other.d->null)
evaluated: d->null
TRUEFALSE
yes
Evaluation Count:7
yes
Evaluation Count:8
evaluated: other.d->null
TRUEFALSE
yes
Evaluation Count:5
yes
Evaluation Count:2
2-8
66 return true;
executed: return true;
Execution Count:5
5
67 if (d->x509 && other.d->x509)
evaluated: d->x509
TRUEFALSE
yes
Evaluation Count:8
yes
Evaluation Count:2
evaluated: other.d->x509
TRUEFALSE
yes
Evaluation Count:6
yes
Evaluation Count:2
2-8
68 return q_X509_cmp(d->x509, other.d->x509) == 0;
executed: return q_X509_cmp(d->x509, other.d->x509) == 0;
Execution Count:6
6
69 return false;
executed: return false;
Execution Count:4
4
70} -
71bool QSslCertificate::isNull() const -
72{ -
73 return d->null;
executed: return d->null;
Execution Count:434
434
74} -
75bool QSslCertificate::isBlacklisted() const -
76{ -
77 return QSslCertificatePrivate::isBlacklisted(*this);
executed: return QSslCertificatePrivate::isBlacklisted(*this);
Execution Count:43
43
78} -
79 -
80 -
81 -
82 -
83 -
84 -
85 -
86void QSslCertificate::clear() -
87{ -
88 if (isNull())
evaluated: isNull()
TRUEFALSE
yes
Evaluation Count:203
yes
Evaluation Count:8
8-203
89 return;
executed: return;
Execution Count:203
203
90 d = new QSslCertificatePrivate; -
91}
executed: }
Execution Count:8
8
92 -
93 -
94 -
95 -
96QByteArray QSslCertificate::version() const -
97{ -
98 QMutexLocker lock(QMutexPool::globalInstanceGet(d.data())); -
99 if (d->versionString.isEmpty() && d->x509)
evaluated: d->versionString.isEmpty()
TRUEFALSE
yes
Evaluation Count:10
yes
Evaluation Count:50
evaluated: d->x509
TRUEFALSE
yes
Evaluation Count:9
yes
Evaluation Count:1
1-50
100 d->versionString = 9
101 QByteArray::number(qlonglong(q_ASN1_INTEGER_get(d->x509->cert_info->version)) + 1);
executed: d->versionString = QByteArray::number(qlonglong(q_ASN1_INTEGER_get(d->x509->cert_info->version)) + 1);
Execution Count:9
9
102 -
103 return d->versionString;
executed: return d->versionString;
Execution Count:60
60
104} -
105 -
106 -
107 -
108 -
109QByteArray QSslCertificate::serialNumber() const -
110{ -
111 QMutexLocker lock(QMutexPool::globalInstanceGet(d.data())); -
112 if (d->serialNumberString.isEmpty() && d->x509) {
evaluated: d->serialNumberString.isEmpty()
TRUEFALSE
yes
Evaluation Count:98
yes
Evaluation Count:2488
evaluated: d->x509
TRUEFALSE
yes
Evaluation Count:65
yes
Evaluation Count:33
33-2488
113 ASN1_INTEGER *serialNumber = d->x509->cert_info->serialNumber; -
114 QByteArray hexString; -
115 hexString.reserve(serialNumber->length * 3); -
116 for (int a = 0; a < serialNumber->length; ++a) {
evaluated: a < serialNumber->length
TRUEFALSE
yes
Evaluation Count:543
yes
Evaluation Count:65
65-543
117 hexString += QByteArray::number(serialNumber->data[a], 16).rightJustified(2, '0'); -
118 hexString += ':'; -
119 }
executed: }
Execution Count:543
543
120 hexString.chop(1); -
121 d->serialNumberString = hexString; -
122 }
executed: }
Execution Count:65
65
123 return d->serialNumberString;
executed: return d->serialNumberString;
Execution Count:2586
2586
124} -
125 -
126 -
127 -
128 -
129 -
130 -
131QByteArray QSslCertificate::digest(QCryptographicHash::Algorithm algorithm) const -
132{ -
133 return QCryptographicHash::hash(toDer(), algorithm);
executed: return QCryptographicHash::hash(toDer(), algorithm);
Execution Count:37
37
134} -
135 -
136static QByteArray _q_SubjectInfoToString(QSslCertificate::SubjectInfo info) -
137{ -
138 QByteArray str; -
139 switch (info) { -
140 case QSslCertificate::Organization: str = QByteArray("O"); break;
executed: break;
Execution Count:60
60
141 case QSslCertificate::CommonName: str = QByteArray("CN"); break;
executed: break;
Execution Count:117
117
142 case QSslCertificate::LocalityName: str = QByteArray("L"); break;
executed: break;
Execution Count:58
58
143 case QSslCertificate::OrganizationalUnitName: str = QByteArray("OU"); break;
executed: break;
Execution Count:58
58
144 case QSslCertificate::CountryName: str = QByteArray("C"); break;
executed: break;
Execution Count:58
58
145 case QSslCertificate::StateOrProvinceName: str = QByteArray("ST"); break;
executed: break;
Execution Count:58
58
146 case QSslCertificate::DistinguishedNameQualifier: str = QByteArray("dnQualifier"); break;
never executed: break;
0
147 case QSslCertificate::SerialNumber: str = QByteArray("serialNumber"); break;
never executed: break;
0
148 case QSslCertificate::EmailAddress: str = QByteArray("emailAddress"); break;
never executed: break;
0
149 } -
150 return str;
executed: return str;
Execution Count:409
409
151} -
152QStringList QSslCertificate::issuerInfo(SubjectInfo info) const -
153{ -
154 QMutexLocker lock(QMutexPool::globalInstanceGet(d.data())); -
155 -
156 if (d->issuerInfo.isEmpty() && d->x509)
evaluated: d->issuerInfo.isEmpty()
TRUEFALSE
yes
Evaluation Count:10
yes
Evaluation Count:167
evaluated: d->x509
TRUEFALSE
yes
Evaluation Count:9
yes
Evaluation Count:1
1-167
157 d->issuerInfo = 9
158 _q_mapFromX509Name(q_X509_get_issuer_name(d->x509));
executed: d->issuerInfo = _q_mapFromX509Name(q_X509_get_issuer_name(d->x509));
Execution Count:9
9
159 -
160 return d->issuerInfo.values(_q_SubjectInfoToString(info));
executed: return d->issuerInfo.values(_q_SubjectInfoToString(info));
Execution Count:177
177
161} -
162QStringList QSslCertificate::issuerInfo(const QByteArray &attribute) const -
163{ -
164 QMutexLocker lock(QMutexPool::globalInstanceGet(d.data())); -
165 -
166 if (d->issuerInfo.isEmpty() && d->x509)
evaluated: d->issuerInfo.isEmpty()
TRUEFALSE
yes
Evaluation Count:1
yes
Evaluation Count:6
partially evaluated: d->x509
TRUEFALSE
yes
Evaluation Count:1
no
Evaluation Count:0
0-6
167 d->issuerInfo = 1
168 _q_mapFromX509Name(q_X509_get_issuer_name(d->x509));
executed: d->issuerInfo = _q_mapFromX509Name(q_X509_get_issuer_name(d->x509));
Execution Count:1
1
169 -
170 return d->issuerInfo.values(attribute);
executed: return d->issuerInfo.values(attribute);
Execution Count:7
7
171} -
172QStringList QSslCertificate::subjectInfo(SubjectInfo info) const -
173{ -
174 QMutexLocker lock(QMutexPool::globalInstanceGet(d.data())); -
175 -
176 if (d->subjectInfo.isEmpty() && d->x509)
evaluated: d->subjectInfo.isEmpty()
TRUEFALSE
yes
Evaluation Count:64
yes
Evaluation Count:168
evaluated: d->x509
TRUEFALSE
yes
Evaluation Count:63
yes
Evaluation Count:1
1-168
177 d->subjectInfo = 63
178 _q_mapFromX509Name(q_X509_get_subject_name(d->x509));
executed: d->subjectInfo = _q_mapFromX509Name(q_X509_get_subject_name(d->x509));
Execution Count:63
63
179 -
180 return d->subjectInfo.values(_q_SubjectInfoToString(info));
executed: return d->subjectInfo.values(_q_SubjectInfoToString(info));
Execution Count:232
232
181} -
182 -
183 -
184 -
185 -
186 -
187 -
188 -
189QStringList QSslCertificate::subjectInfo(const QByteArray &attribute) const -
190{ -
191 QMutexLocker lock(QMutexPool::globalInstanceGet(d.data())); -
192 -
193 if (d->subjectInfo.isEmpty() && d->x509)
evaluated: d->subjectInfo.isEmpty()
TRUEFALSE
yes
Evaluation Count:2
yes
Evaluation Count:9
partially evaluated: d->x509
TRUEFALSE
yes
Evaluation Count:2
no
Evaluation Count:0
0-9
194 d->subjectInfo = 2
195 _q_mapFromX509Name(q_X509_get_subject_name(d->x509));
executed: d->subjectInfo = _q_mapFromX509Name(q_X509_get_subject_name(d->x509));
Execution Count:2
2
196 -
197 return d->subjectInfo.values(attribute);
executed: return d->subjectInfo.values(attribute);
Execution Count:11
11
198} -
199QList<QByteArray> QSslCertificate::subjectInfoAttributes() const -
200{ -
201 QMutexLocker lock(QMutexPool::globalInstanceGet(d.data())); -
202 -
203 if (d->subjectInfo.isEmpty() && d->x509)
evaluated: d->subjectInfo.isEmpty()
TRUEFALSE
yes
Evaluation Count:2
yes
Evaluation Count:2
partially evaluated: d->x509
TRUEFALSE
yes
Evaluation Count:2
no
Evaluation Count:0
0-2
204 d->subjectInfo = 2
205 _q_mapFromX509Name(q_X509_get_subject_name(d->x509));
executed: d->subjectInfo = _q_mapFromX509Name(q_X509_get_subject_name(d->x509));
Execution Count:2
2
206 -
207 return d->subjectInfo.uniqueKeys();
executed: return d->subjectInfo.uniqueKeys();
Execution Count:4
4
208} -
209QList<QByteArray> QSslCertificate::issuerInfoAttributes() const -
210{ -
211 QMutexLocker lock(QMutexPool::globalInstanceGet(d.data())); -
212 -
213 if (d->issuerInfo.isEmpty() && d->x509)
partially evaluated: d->issuerInfo.isEmpty()
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:2
never evaluated: d->x509
0-2
214 d->issuerInfo = 0
215 _q_mapFromX509Name(q_X509_get_issuer_name(d->x509));
never executed: d->issuerInfo = _q_mapFromX509Name(q_X509_get_issuer_name(d->x509));
0
216 -
217 return d->issuerInfo.uniqueKeys();
executed: return d->issuerInfo.uniqueKeys();
Execution Count:2
2
218} -
219QMultiMap<QSsl::AlternativeNameEntryType, QString> QSslCertificate::subjectAlternativeNames() const -
220{ -
221 QMultiMap<QSsl::AlternativeNameEntryType, QString> result; -
222 -
223 if (!d->x509)
evaluated: !d->x509
TRUEFALSE
yes
Evaluation Count:1
yes
Evaluation Count:35
1-35
224 return result;
executed: return result;
Execution Count:1
1
225 -
226 STACK *altNames = (STACK*)q_X509_get_ext_d2i(d->x509, 85, 0, 0); -
227 -
228 if (altNames) {
evaluated: altNames
TRUEFALSE
yes
Evaluation Count:11
yes
Evaluation Count:24
11-24
229 for (int i = 0; i < ((int (*)(const STACK *))q_sk_num)((altNames)); ++i) {
evaluated: i < ((int (*)(const STACK *))q_sk_num)((altNames))
TRUEFALSE
yes
Evaluation Count:31
yes
Evaluation Count:11
11-31
230 const GENERAL_NAME *genName = ((GENERAL_NAME * (*)(const STACK *, int))q_sk_value)((altNames), (i)); -
231 if (genName->type != 2 && genName->type != 1)
evaluated: genName->type != 2
TRUEFALSE
yes
Evaluation Count:20
yes
Evaluation Count:11
partially evaluated: genName->type != 1
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:20
0-20
232 continue;
never executed: continue;
0
233 -
234 int len = q_ASN1_STRING_length(genName->d.ia5); -
235 if (len < 0 || len >= 8192) {
partially evaluated: len < 0
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:31
partially evaluated: len >= 8192
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:31
0-31
236 -
237 continue;
never executed: continue;
0
238 } -
239 -
240 const char *altNameStr = reinterpret_cast<const char *>(q_ASN1_STRING_data(genName->d.ia5)); -
241 const QString altName = QString::fromLatin1(altNameStr, len); -
242 if (genName->type == 2)
evaluated: genName->type == 2
TRUEFALSE
yes
Evaluation Count:11
yes
Evaluation Count:20
11-20
243 result.insert(QSsl::DnsEntry, altName);
executed: result.insert(QSsl::DnsEntry, altName);
Execution Count:11
11
244 else if (genName->type == 1)
partially evaluated: genName->type == 1
TRUEFALSE
yes
Evaluation Count:20
no
Evaluation Count:0
0-20
245 result.insert(QSsl::EmailEntry, altName);
executed: result.insert(QSsl::EmailEntry, altName);
Execution Count:20
20
246 } -
247 q_sk_pop_free((STACK*)altNames, reinterpret_cast<void(*)(void*)>(q_sk_free)); -
248 }
executed: }
Execution Count:11
11
249 -
250 return result;
executed: return result;
Execution Count:35
35
251} -
252 -
253 -
254 -
255 -
256 -
257 -
258 -
259QDateTime QSslCertificate::effectiveDate() const -
260{ -
261 return d->notValidBefore;
executed: return d->notValidBefore;
Execution Count:33
33
262} -
263 -
264 -
265 -
266 -
267 -
268 -
269 -
270QDateTime QSslCertificate::expiryDate() const -
271{ -
272 return d->notValidAfter;
executed: return d->notValidAfter;
Execution Count:2018
2018
273} -
274Qt::HANDLE QSslCertificate::handle() const -
275{ -
276 return Qt::HANDLE(d->x509);
executed: return Qt::HANDLE(d->x509);
Execution Count:1998
1998
277} -
278 -
279 -
280 -
281 -
282QSslKey QSslCertificate::publicKey() const -
283{ -
284 if (!d->x509)
partially evaluated: !d->x509
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:6
0-6
285 return QSslKey();
never executed: return QSslKey();
0
286 -
287 QSslKey key; -
288 -
289 key.d->type = QSsl::PublicKey; -
290 X509_PUBKEY *xkey = d->x509->cert_info->key; -
291 EVP_PKEY *pkey = q_X509_PUBKEY_get(xkey); -
292 qt_noop(); -
293 -
294 if (q_EVP_PKEY_type(pkey->type) == 6) {
partially evaluated: q_EVP_PKEY_type(pkey->type) == 6
TRUEFALSE
yes
Evaluation Count:6
no
Evaluation Count:0
0-6
295 key.d->rsa = q_EVP_PKEY_get1_RSA(pkey); -
296 key.d->algorithm = QSsl::Rsa; -
297 key.d->isNull = false; -
298 } else if (q_EVP_PKEY_type(pkey->type) == 116) {
never evaluated: q_EVP_PKEY_type(pkey->type) == 116
executed: }
Execution Count:6
0-6
299 key.d->dsa = q_EVP_PKEY_get1_DSA(pkey); -
300 key.d->algorithm = QSsl::Dsa; -
301 key.d->isNull = false; -
302 } else if (q_EVP_PKEY_type(pkey->type) == 28) {
never evaluated: q_EVP_PKEY_type(pkey->type) == 28
never executed: }
0
303 -
304 } else {
never executed: }
0
305 -
306 }
never executed: }
0
307 -
308 q_EVP_PKEY_free(pkey); -
309 return key;
executed: return key;
Execution Count:6
6
310} -
311 -
312 -
313 -
314 -
315static QVariant x509UnknownExtensionToValue(X509_EXTENSION *ext) -
316{ -
317 -
318 -
319 -
320 -
321 X509V3_EXT_METHOD *meth = const_cast<X509V3_EXT_METHOD *>(q_X509V3_EXT_get(ext)); -
322 if (!meth) {
evaluated: !meth
TRUEFALSE
yes
Evaluation Count:1
yes
Evaluation Count:4
1-4
323 ASN1_OCTET_STRING *value = q_X509_EXTENSION_get_data(ext); -
324 QByteArray result( reinterpret_cast<const char *>(q_ASN1_STRING_data(value)), -
325 q_ASN1_STRING_length(value)); -
326 return result;
executed: return result;
Execution Count:1
1
327 } -
328 -
329 -
330 void *ext_internal = q_X509V3_EXT_d2i(ext); -
331 -
332 -
333 if (meth->i2v && ext_internal) {
evaluated: meth->i2v
TRUEFALSE
yes
Evaluation Count:3
yes
Evaluation Count:1
partially evaluated: ext_internal
TRUEFALSE
yes
Evaluation Count:3
no
Evaluation Count:0
0-3
334 STACK *val = meth->i2v(meth, ext_internal, 0); -
335 -
336 QVariantMap map; -
337 QVariantList list; -
338 bool isMap = false; -
339 -
340 for (int j = 0; j < ((int (*)(const STACK *))q_sk_num)(val); j++) {
evaluated: j < ((int (*)(const STACK *))q_sk_num)(val)
TRUEFALSE
yes
Evaluation Count:7
yes
Evaluation Count:3
3-7
341 CONF_VALUE *nval = ((CONF_VALUE * (*)(const STACK *, int))q_sk_value)(val, j); -
342 if (nval->name && nval->value) {
evaluated: nval->name
TRUEFALSE
yes
Evaluation Count:3
yes
Evaluation Count:4
evaluated: nval->value
TRUEFALSE
yes
Evaluation Count:1
yes
Evaluation Count:2
1-4
343 isMap = true; -
344 map[QString::fromUtf8(nval->name)] = QString::fromUtf8(nval->value); -
345 } else if (nval->name) {
evaluated: nval->name
TRUEFALSE
yes
Evaluation Count:2
yes
Evaluation Count:4
executed: }
Execution Count:1
1-4
346 list << QString::fromUtf8(nval->name); -
347 } else if (nval->value) {
partially evaluated: nval->value
TRUEFALSE
yes
Evaluation Count:4
no
Evaluation Count:0
executed: }
Execution Count:2
0-4
348 list << QString::fromUtf8(nval->value); -
349 }
executed: }
Execution Count:4
4
350 } -
351 -
352 if (isMap)
evaluated: isMap
TRUEFALSE
yes
Evaluation Count:1
yes
Evaluation Count:2
1-2
353 return map;
executed: return map;
Execution Count:1
1
354 else -
355 return list;
executed: return list;
Execution Count:2
2
356 } else if (meth->i2s && ext_internal) {
partially evaluated: meth->i2s
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:1
never evaluated: ext_internal
0-1
357 -
358 QVariant result(QString::fromUtf8(meth->i2s(meth, ext_internal))); -
359 return result;
never executed: return result;
0
360 } else if (meth->i2r && ext_internal) {
partially evaluated: meth->i2r
TRUEFALSE
yes
Evaluation Count:1
no
Evaluation Count:0
partially evaluated: ext_internal
TRUEFALSE
yes
Evaluation Count:1
no
Evaluation Count:0
0-1
361 QByteArray result; -
362 -
363 BIO *bio = q_BIO_new(q_BIO_s_mem()); -
364 if (!bio)
partially evaluated: !bio
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:1
0-1
365 return result;
never executed: return result;
0
366 -
367 meth->i2r(meth, ext_internal, bio, 0); -
368 -
369 char *bio_buffer; -
370 long bio_size = (int)q_BIO_ctrl(bio,3,0,(char *)&bio_buffer); -
371 result = QByteArray(bio_buffer, bio_size); -
372 -
373 q_BIO_free(bio); -
374 return result;
executed: return result;
Execution Count:1
1
375 } -
376 -
377 return QVariant();
never executed: return QVariant();
0
378} -
379 -
380 -
381 -
382 -
383 -
384 -
385static QVariant x509ExtensionToValue(X509_EXTENSION *ext) -
386{ -
387 ASN1_OBJECT *obj = q_X509_EXTENSION_get_object(ext); -
388 int nid = q_OBJ_obj2nid(obj); -
389 -
390 switch (nid) { -
391 case 87: -
392 { -
393 BASIC_CONSTRAINTS *basic = reinterpret_cast<BASIC_CONSTRAINTS *>(q_X509V3_EXT_d2i(ext)); -
394 -
395 QVariantMap result; -
396 result[QLatin1String("ca")] = basic->ca ? true : false;
partially evaluated: basic->ca
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:1
0-1
397 if (basic->pathlen)
partially evaluated: basic->pathlen
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:1
0-1
398 result[QLatin1String("pathLenConstraint")] = (qlonglong)q_ASN1_INTEGER_get(basic->pathlen);
never executed: result[QLatin1String("pathLenConstraint")] = (qlonglong)q_ASN1_INTEGER_get(basic->pathlen);
0
399 -
400 q_BASIC_CONSTRAINTS_free(basic); -
401 return result;
executed: return result;
Execution Count:1
1
402 } -
403 break;
dead code: break;
-
404 case 177: -
405 { -
406 AUTHORITY_INFO_ACCESS *info = reinterpret_cast<AUTHORITY_INFO_ACCESS *>(q_X509V3_EXT_d2i(ext)); -
407 -
408 QVariantMap result; -
409 for (int i=0; i < ((int (*)(const STACK *))q_sk_num)(info); i++) {
evaluated: i < ((int (*)(const STACK *))q_sk_num)(info)
TRUEFALSE
yes
Evaluation Count:2
yes
Evaluation Count:1
1-2
410 ACCESS_DESCRIPTION *ad = ((ACCESS_DESCRIPTION * (*)(const STACK *, int))q_sk_value)(info, i); -
411 -
412 GENERAL_NAME *name = ad->location; -
413 if (name->type == 6) {
partially evaluated: name->type == 6
TRUEFALSE
yes
Evaluation Count:2
no
Evaluation Count:0
0-2
414 int len = q_ASN1_STRING_length(name->d.uniformResourceIdentifier); -
415 if (len < 0 || len >= 8192) {
partially evaluated: len < 0
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:2
partially evaluated: len >= 8192
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:2
0-2
416 -
417 continue;
never executed: continue;
0
418 } -
419 -
420 const char *uriStr = reinterpret_cast<const char *>(q_ASN1_STRING_data(name->d.uniformResourceIdentifier)); -
421 const QString uri = QString::fromUtf8(uriStr, len); -
422 -
423 result[QString::fromUtf8(QSslCertificatePrivate::asn1ObjectName(ad->method))] = uri; -
424 } else {
executed: }
Execution Count:2
2
425 QMessageLogger("ssl/qsslcertificate.cpp", 697, __PRETTY_FUNCTION__).warning() << "Strange location type" << name->type; -
426 }
never executed: }
0
427 } -
428 -
429 -
430 -
431 -
432 q_sk_pop_free((STACK*)info, reinterpret_cast<void(*)(void*)>(q_sk_free)); -
433 -
434 return result;
executed: return result;
Execution Count:1
1
435 } -
436 break;
dead code: break;
-
437 case 82: -
438 { -
439 void *ext_internal = q_X509V3_EXT_d2i(ext); -
440 -
441 -
442 -
443 -
444 X509V3_EXT_METHOD *meth = const_cast<X509V3_EXT_METHOD *>(q_X509V3_EXT_get(ext)); -
445 -
446 return QVariant(QString::fromUtf8(meth->i2s(meth, ext_internal)));
executed: return QVariant(QString::fromUtf8(meth->i2s(meth, ext_internal)));
Execution Count:1
1
447 } -
448 break;
dead code: break;
-
449 case 90: -
450 { -
451 AUTHORITY_KEYID *auth_key = reinterpret_cast<AUTHORITY_KEYID *>(q_X509V3_EXT_d2i(ext)); -
452 -
453 QVariantMap result; -
454 -
455 -
456 if (auth_key->keyid) {
partially evaluated: auth_key->keyid
TRUEFALSE
yes
Evaluation Count:1
no
Evaluation Count:0
0-1
457 QByteArray keyid(reinterpret_cast<const char *>(auth_key->keyid->data), -
458 auth_key->keyid->length); -
459 result[QLatin1String("keyid")] = keyid.toHex(); -
460 }
executed: }
Execution Count:1
1
461 -
462 -
463 -
464 -
465 -
466 if (auth_key->serial)
partially evaluated: auth_key->serial
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:1
0-1
467 result[QLatin1String("serial")] = (qlonglong)q_ASN1_INTEGER_get(auth_key->serial);
never executed: result[QLatin1String("serial")] = (qlonglong)q_ASN1_INTEGER_get(auth_key->serial);
0
468 -
469 q_AUTHORITY_KEYID_free(auth_key); -
470 return result;
executed: return result;
Execution Count:1
1
471 } -
472 break;
dead code: break;
-
473 } -
474 -
475 return QVariant();
executed: return QVariant();
Execution Count:5
5
476} -
477 -
478QSslCertificateExtension QSslCertificatePrivate::convertExtension(X509_EXTENSION *ext) -
479{ -
480 QSslCertificateExtension result; -
481 -
482 ASN1_OBJECT *obj = q_X509_EXTENSION_get_object(ext); -
483 QByteArray oid = QSslCertificatePrivate::asn1ObjectId(obj); -
484 QByteArray name = QSslCertificatePrivate::asn1ObjectName(obj); -
485 -
486 result.d->oid = QString::fromUtf8(oid); -
487 result.d->name = QString::fromUtf8(name); -
488 -
489 bool critical = q_X509_EXTENSION_get_critical(ext); -
490 result.d->critical = critical; -
491 -
492 -
493 QVariant extensionValue = x509ExtensionToValue(ext); -
494 if (extensionValue.isValid()) {
evaluated: extensionValue.isValid()
TRUEFALSE
yes
Evaluation Count:4
yes
Evaluation Count:5
4-5
495 result.d->value = extensionValue; -
496 result.d->supported = true; -
497 -
498 return result;
executed: return result;
Execution Count:4
4
499 } -
500 -
501 extensionValue = x509UnknownExtensionToValue(ext); -
502 if (extensionValue.isValid()) {
partially evaluated: extensionValue.isValid()
TRUEFALSE
yes
Evaluation Count:5
no
Evaluation Count:0
0-5
503 result.d->value = extensionValue; -
504 result.d->supported = false; -
505 return result;
executed: return result;
Execution Count:5
5
506 } -
507 -
508 return result;
never executed: return result;
0
509} -
510 -
511 -
512 -
513 -
514 -
515QList<QSslCertificateExtension> QSslCertificate::extensions() const -
516{ -
517 QList<QSslCertificateExtension> result; -
518 -
519 if (!d->x509)
partially evaluated: !d->x509
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:3
0-3
520 return result;
never executed: return result;
0
521 -
522 int count = q_X509_get_ext_count(d->x509); -
523 -
524 for (int i=0; i < count; i++) {
evaluated: i < count
TRUEFALSE
yes
Evaluation Count:9
yes
Evaluation Count:3
3-9
525 X509_EXTENSION *ext = q_X509_get_ext(d->x509, i); -
526 result << QSslCertificatePrivate::convertExtension(ext); -
527 }
executed: }
Execution Count:9
9
528 -
529 return result;
executed: return result;
Execution Count:3
3
530} -
531 -
532 -
533 -
534 -
535 -
536QByteArray QSslCertificate::toPem() const -
537{ -
538 if (!d->x509)
partially evaluated: !d->x509
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:37
0-37
539 return QByteArray();
never executed: return QByteArray();
0
540 return d->QByteArray_from_X509(d->x509, QSsl::Pem);
executed: return d->QByteArray_from_X509(d->x509, QSsl::Pem);
Execution Count:37
37
541} -
542 -
543 -
544 -
545 -
546 -
547QByteArray QSslCertificate::toDer() const -
548{ -
549 if (!d->x509)
evaluated: !d->x509
TRUEFALSE
yes
Evaluation Count:1
yes
Evaluation Count:69
1-69
550 return QByteArray();
executed: return QByteArray();
Execution Count:1
1
551 return d->QByteArray_from_X509(d->x509, QSsl::Der);
executed: return d->QByteArray_from_X509(d->x509, QSsl::Der);
Execution Count:69
69
552} -
553 -
554 -
555 -
556 -
557 -
558 -
559 -
560QString QSslCertificate::toText() const -
561{ -
562 if (!d->x509)
partially evaluated: !d->x509
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:3
0-3
563 return QString();
never executed: return QString();
0
564 return d->text_from_X509(d->x509);
executed: return d->text_from_X509(d->x509);
Execution Count:3
3
565} -
566QList<QSslCertificate> QSslCertificate::fromPath(const QString &path, -
567 QSsl::EncodingFormat format, -
568 QRegExp::PatternSyntax syntax) -
569{ -
570 -
571 -
572 -
573 QString sourcePath = QDir::fromNativeSeparators(path); -
574 -
575 -
576 QString pathPrefix = sourcePath.left(sourcePath.lastIndexOf(QLatin1Char('/'))); -
577 -
578 -
579 int pos = -1; -
580 if (syntax == QRegExp::Wildcard)
evaluated: syntax == QRegExp::Wildcard
TRUEFALSE
yes
Evaluation Count:22
yes
Evaluation Count:203
22-203
581 pos = pathPrefix.indexOf(QRegExp(QLatin1String("[*?[]")));
executed: pos = pathPrefix.indexOf(QRegExp(QLatin1String("[*?[]")));
Execution Count:22
22
582 else if (syntax != QRegExp::FixedString)
evaluated: syntax != QRegExp::FixedString
TRUEFALSE
yes
Evaluation Count:16
yes
Evaluation Count:187
16-187
583 pos = sourcePath.indexOf(QRegExp(QLatin1String("[\\$\\(\\)\\*\\+\\.\\?\\[\\]\\^\\{\\}\\|]")));
executed: pos = sourcePath.indexOf(QRegExp(QLatin1String("[\\$\\(\\)\\*\\+\\.\\?\\[\\]\\^\\{\\}\\|]")));
Execution Count:16
16
584 if (pos != -1) {
evaluated: pos != -1
TRUEFALSE
yes
Evaluation Count:20
yes
Evaluation Count:205
20-205
585 -
586 pathPrefix = pathPrefix.left(pos); -
587 if (pathPrefix.contains(QLatin1Char('/')))
partially evaluated: pathPrefix.contains(QLatin1Char('/'))
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:20
0-20
588 pathPrefix = pathPrefix.left(pathPrefix.lastIndexOf(QLatin1Char('/')));
never executed: pathPrefix = pathPrefix.left(pathPrefix.lastIndexOf(QLatin1Char('/')));
0
589 else -
590 pathPrefix.clear();
executed: pathPrefix.clear();
Execution Count:20
20
591 } else { -
592 -
593 if (QFileInfo(sourcePath).isFile()) {
evaluated: QFileInfo(sourcePath).isFile()
TRUEFALSE
yes
Evaluation Count:173
yes
Evaluation Count:32
32-173
594 QFile file(sourcePath); -
595 if (file.open(QIODevice::ReadOnly | QIODevice::Text))
partially evaluated: file.open(QIODevice::ReadOnly | QIODevice::Text)
TRUEFALSE
yes
Evaluation Count:173
no
Evaluation Count:0
0-173
596 return QSslCertificate::fromData(file.readAll(),format);
executed: return QSslCertificate::fromData(file.readAll(),format);
Execution Count:173
173
597 return QList<QSslCertificate>();
never executed: return QList<QSslCertificate>();
0
598 } -
599 }
executed: }
Execution Count:32
32
600 -
601 -
602 int startIndex = 0; -
603 if (pathPrefix.isEmpty()) {
evaluated: pathPrefix.isEmpty()
TRUEFALSE
yes
Evaluation Count:26
yes
Evaluation Count:26
26
604 pathPrefix = QLatin1String("."); -
605 startIndex = 2; -
606 }
executed: }
Execution Count:26
26
607 -
608 -
609 QList<QSslCertificate> certs; -
610 QRegExp pattern(sourcePath, Qt::CaseSensitive, syntax); -
611 QDirIterator it(pathPrefix, QDir::Files, QDirIterator::FollowSymlinks | QDirIterator::Subdirectories); -
612 while (it.hasNext()) {
evaluated: it.hasNext()
TRUEFALSE
yes
Evaluation Count:1901
yes
Evaluation Count:52
52-1901
613 QString filePath = startIndex == 0 ? it.next() : it.next().mid(startIndex);
evaluated: startIndex == 0
TRUEFALSE
yes
Evaluation Count:341
yes
Evaluation Count:1560
341-1560
614 if (!pattern.exactMatch(filePath))
evaluated: !pattern.exactMatch(filePath)
TRUEFALSE
yes
Evaluation Count:1791
yes
Evaluation Count:110
110-1791
615 continue;
executed: continue;
Execution Count:1791
1791
616 -
617 QFile file(filePath); -
618 if (file.open(QIODevice::ReadOnly | QIODevice::Text))
partially evaluated: file.open(QIODevice::ReadOnly | QIODevice::Text)
TRUEFALSE
yes
Evaluation Count:110
no
Evaluation Count:0
0-110
619 certs += QSslCertificate::fromData(file.readAll(),format);
executed: certs += QSslCertificate::fromData(file.readAll(),format);
Execution Count:110
110
620 }
executed: }
Execution Count:110
110
621 return certs;
executed: return certs;
Execution Count:52
52
622} -
623QList<QSslCertificate> QSslCertificate::fromDevice(QIODevice *device, QSsl::EncodingFormat format) -
624{ -
625 if (!device) {
partially evaluated: !device
TRUEFALSE
yes
Evaluation Count:1
no
Evaluation Count:0
0-1
626 QMessageLogger("ssl/qsslcertificate.cpp", 918, __PRETTY_FUNCTION__).warning("QSslCertificate::fromDevice: cannot read from a null device"); -
627 return QList<QSslCertificate>();
executed: return QList<QSslCertificate>();
Execution Count:1
1
628 } -
629 return fromData(device->readAll(), format);
never executed: return fromData(device->readAll(), format);
0
630} -
631QList<QSslCertificate> QSslCertificate::fromData(const QByteArray &data, QSsl::EncodingFormat format) -
632{ -
633 return (format == QSsl::Pem) 283
634 ? QSslCertificatePrivate::certificatesFromPem(data) 283
635 : QSslCertificatePrivate::certificatesFromDer(data);
executed: return (format == QSsl::Pem) ? QSslCertificatePrivate::certificatesFromPem(data) : QSslCertificatePrivate::certificatesFromDer(data);
Execution Count:283
283
636} -
637QList<QSslError> QSslCertificate::verify(QList<QSslCertificate> certificateChain, const QString &hostName) -
638{ -
639 return QSslSocketBackendPrivate::verify(certificateChain, hostName);
executed: return QSslSocketBackendPrivate::verify(certificateChain, hostName);
Execution Count:8
8
640} -
641 -
642void QSslCertificatePrivate::init(const QByteArray &data, QSsl::EncodingFormat format) -
643{ -
644 if (!data.isEmpty()) {
evaluated: !data.isEmpty()
TRUEFALSE
yes
Evaluation Count:43
yes
Evaluation Count:9347
43-9347
645 QList<QSslCertificate> certs = (format == QSsl::Pem)
evaluated: (format == QSsl::Pem)
TRUEFALSE
yes
Evaluation Count:32
yes
Evaluation Count:11
11-32
646 ? certificatesFromPem(data, 1) -
647 : certificatesFromDer(data, 1); -
648 if (!certs.isEmpty()) {
evaluated: !certs.isEmpty()
TRUEFALSE
yes
Evaluation Count:42
yes
Evaluation Count:1
1-42
649 *this = *certs.first().d; -
650 if (x509)
partially evaluated: x509
TRUEFALSE
yes
Evaluation Count:42
no
Evaluation Count:0
0-42
651 x509 = q_X509_dup(x509);
executed: x509 = q_X509_dup(x509);
Execution Count:42
42
652 }
executed: }
Execution Count:42
42
653 }
executed: }
Execution Count:43
43
654}
executed: }
Execution Count:9390
9390
655 -
656 -
657 -
658 -
659 -
660QByteArray QSslCertificatePrivate::QByteArray_from_X509(X509 *x509, QSsl::EncodingFormat format) -
661{ -
662 if (!x509) {
partially evaluated: !x509
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:106
0-106
663 QMessageLogger("ssl/qsslcertificate.cpp", 978, __PRETTY_FUNCTION__).warning("QSslSocketBackendPrivate::X509_to_QByteArray: null X509"); -
664 return QByteArray();
never executed: return QByteArray();
0
665 } -
666 -
667 -
668 int length = q_i2d_X509(x509, 0); -
669 QByteArray array; -
670 array.resize(length); -
671 char *data = array.data(); -
672 char **dataP = &data; -
673 unsigned char **dataPu = (unsigned char **)dataP; -
674 if (q_i2d_X509(x509, dataPu) < 0)
partially evaluated: q_i2d_X509(x509, dataPu) < 0
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:106
0-106
675 return QByteArray();
never executed: return QByteArray();
0
676 -
677 if (format == QSsl::Der)
evaluated: format == QSsl::Der
TRUEFALSE
yes
Evaluation Count:69
yes
Evaluation Count:37
37-69
678 return array;
executed: return array;
Execution Count:69
69
679 -
680 -
681 array = array.toBase64(); -
682 QByteArray tmp; -
683 for (int i = 0; i <= array.size() - 64; i += 64) {
evaluated: i <= array.size() - 64
TRUEFALSE
yes
Evaluation Count:413
yes
Evaluation Count:37
37-413
684 tmp += QByteArray::fromRawData(array.data() + i, 64); -
685 tmp += '\n'; -
686 }
executed: }
Execution Count:413
413
687 if (int remainder = array.size() % 64) {
evaluated: int remainder = array.size() % 64
TRUEFALSE
yes
Evaluation Count:36
yes
Evaluation Count:1
1-36
688 tmp += QByteArray::fromRawData(array.data() + array.size() - remainder, remainder); -
689 tmp += '\n'; -
690 }
executed: }
Execution Count:36
36
691 -
692 return "-----BEGIN CERTIFICATE-----" "\n" + tmp + "-----END CERTIFICATE-----" "\n";
executed: return "-----BEGIN CERTIFICATE-----" "\n" + tmp + "-----END CERTIFICATE-----" "\n";
Execution Count:37
37
693} -
694 -
695QString QSslCertificatePrivate::text_from_X509(X509 *x509) -
696{ -
697 if (!x509) {
partially evaluated: !x509
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:3
0-3
698 QMessageLogger("ssl/qsslcertificate.cpp", 1013, __PRETTY_FUNCTION__).warning("QSslSocketBackendPrivate::text_from_X509: null X509"); -
699 return QString();
never executed: return QString();
0
700 } -
701 -
702 QByteArray result; -
703 BIO *bio = q_BIO_new(q_BIO_s_mem()); -
704 if (!bio)
partially evaluated: !bio
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:3
0-3
705 return QString();
never executed: return QString();
0
706 -
707 q_X509_print(bio, x509); -
708 -
709 QVarLengthArray<char, 16384> data; -
710 int count = q_BIO_read(bio, data.data(), 16384); -
711 if ( count > 0 ) {
partially evaluated: count > 0
TRUEFALSE
yes
Evaluation Count:3
no
Evaluation Count:0
0-3
712 result = QByteArray( data.data(), count ); -
713 }
executed: }
Execution Count:3
3
714 -
715 q_BIO_free(bio); -
716 -
717 return QString::fromLatin1(result);
executed: return QString::fromLatin1(result);
Execution Count:3
3
718} -
719 -
720QByteArray QSslCertificatePrivate::asn1ObjectId(ASN1_OBJECT *object) -
721{ -
722 char buf[80]; -
723 q_OBJ_obj2txt(buf, sizeof(buf), object, 1); -
724 -
725 return QByteArray(buf);
executed: return QByteArray(buf);
Execution Count:11
11
726} -
727 -
728 -
729QByteArray QSslCertificatePrivate::asn1ObjectName(ASN1_OBJECT *object) -
730{ -
731 int nid = q_OBJ_obj2nid(object); -
732 if (nid != 0)
evaluated: nid != 0
TRUEFALSE
yes
Evaluation Count:413
yes
Evaluation Count:2
2-413
733 return QByteArray(q_OBJ_nid2sn(nid));
executed: return QByteArray(q_OBJ_nid2sn(nid));
Execution Count:413
413
734 -
735 return asn1ObjectId(object);
executed: return asn1ObjectId(object);
Execution Count:2
2
736} -
737 -
738static QMap<QByteArray, QString> _q_mapFromX509Name(X509_NAME *name) -
739{ -
740 QMap<QByteArray, QString> info; -
741 for (int i = 0; i < q_X509_NAME_entry_count(name); ++i) {
evaluated: i < q_X509_NAME_entry_count(name)
TRUEFALSE
yes
Evaluation Count:404
yes
Evaluation Count:77
77-404
742 X509_NAME_ENTRY *e = q_X509_NAME_get_entry(name, i); -
743 -
744 QByteArray name = QSslCertificatePrivate::asn1ObjectName(q_X509_NAME_ENTRY_get_object(e)); -
745 unsigned char *data = 0; -
746 int size = q_ASN1_STRING_to_UTF8(&data, q_X509_NAME_ENTRY_get_data(e)); -
747 info.insertMulti(name, QString::fromUtf8((char*)data, size)); -
748 q_CRYPTO_free(data); -
749 }
executed: }
Execution Count:404
404
750 -
751 return info;
executed: return info;
Execution Count:77
77
752} -
753 -
754QSslCertificate QSslCertificatePrivate::QSslCertificate_from_X509(X509 *x509) -
755{ -
756 QSslCertificate certificate; -
757 if (!x509 || !QSslSocket::supportsSsl())
evaluated: !x509
TRUEFALSE
yes
Evaluation Count:3
yes
Evaluation Count:469
partially evaluated: !QSslSocket::supportsSsl()
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:469
0-469
758 return certificate;
executed: return certificate;
Execution Count:3
3
759 -
760 ASN1_TIME *nbef = ((x509)->cert_info->validity->notBefore); -
761 ASN1_TIME *naft = ((x509)->cert_info->validity->notAfter); -
762 certificate.d->notValidBefore = q_getTimeFromASN1(nbef); -
763 certificate.d->notValidAfter = q_getTimeFromASN1(naft); -
764 certificate.d->null = false; -
765 certificate.d->x509 = q_X509_dup(x509); -
766 -
767 return certificate;
executed: return certificate;
Execution Count:469
469
768} -
769 -
770static bool matchLineFeed(const QByteArray &pem, int *offset) -
771{ -
772 char ch = 0; -
773 -
774 -
775 while (*offset < pem.size() && (ch = pem.at(*offset)) == ' ')
evaluated: *offset < pem.size()
TRUEFALSE
yes
Evaluation Count:768
yes
Evaluation Count:1
evaluated: (ch = pem.at(*offset)) == ' '
TRUEFALSE
yes
Evaluation Count:4
yes
Evaluation Count:764
1-768
776 ++*offset;
executed: ++*offset;
Execution Count:4
4
777 -
778 if (ch == '\n') {
evaluated: ch == '\n'
TRUEFALSE
yes
Evaluation Count:764
yes
Evaluation Count:1
1-764
779 *offset += 1; -
780 return true;
executed: return true;
Execution Count:764
764
781 } -
782 if (ch == '\r' && pem.size() > (*offset + 1) && pem.at(*offset + 1) == '\n') {
partially evaluated: ch == '\r'
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:1
never evaluated: pem.size() > (*offset + 1)
never evaluated: pem.at(*offset + 1) == '\n'
0-1
783 *offset += 2; -
784 return true;
never executed: return true;
0
785 } -
786 return false;
executed: return false;
Execution Count:1
1
787} -
788 -
789QList<QSslCertificate> QSslCertificatePrivate::certificatesFromPem(const QByteArray &pem, int count) -
790{ -
791 QList<QSslCertificate> certificates; -
792 QSslSocketPrivate::ensureInitialized(); -
793 -
794 int offset = 0; -
795 while (count == -1 || certificates.size() < count) {
evaluated: count == -1
TRUEFALSE
yes
Evaluation Count:600
yes
Evaluation Count:63
evaluated: certificates.size() < count
TRUEFALSE
yes
Evaluation Count:32
yes
Evaluation Count:31
31-600
796 int startPos = pem.indexOf("-----BEGIN CERTIFICATE-----", offset); -
797 if (startPos == -1)
evaluated: startPos == -1
TRUEFALSE
yes
Evaluation Count:248
yes
Evaluation Count:384
248-384
798 break;
executed: break;
Execution Count:248
248
799 startPos += sizeof("-----BEGIN CERTIFICATE-----") - 1; -
800 if (!matchLineFeed(pem, &startPos))
evaluated: !matchLineFeed(pem, &startPos)
TRUEFALSE
yes
Evaluation Count:1
yes
Evaluation Count:383
1-383
801 break;
executed: break;
Execution Count:1
1
802 -
803 int endPos = pem.indexOf("-----END CERTIFICATE-----", startPos); -
804 if (endPos == -1)
evaluated: endPos == -1
TRUEFALSE
yes
Evaluation Count:1
yes
Evaluation Count:382
1-382
805 break;
executed: break;
Execution Count:1
1
806 -
807 offset = endPos + sizeof("-----END CERTIFICATE-----") - 1; -
808 if (offset < pem.size() && !matchLineFeed(pem, &offset))
evaluated: offset < pem.size()
TRUEFALSE
yes
Evaluation Count:381
yes
Evaluation Count:1
partially evaluated: !matchLineFeed(pem, &offset)
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:381
0-381
809 break;
never executed: break;
0
810 -
811 QByteArray decoded = QByteArray::fromBase64( -
812 QByteArray::fromRawData(pem.data() + startPos, endPos - startPos)); -
813 -
814 const unsigned char *data = (const unsigned char *)decoded.data(); -
815 -
816 -
817 -
818 -
819 if (X509 *x509 = q_d2i_X509(0, &data, decoded.size())) {
partially evaluated: X509 *x509 = q_d2i_X509(0, &data, decoded.size())
TRUEFALSE
yes
Evaluation Count:382
no
Evaluation Count:0
0-382
820 certificates << QSslCertificate_from_X509(x509); -
821 q_X509_free(x509); -
822 }
executed: }
Execution Count:382
382
823 }
executed: }
Execution Count:382
382
824 -
825 return certificates;
executed: return certificates;
Execution Count:281
281
826} -
827 -
828QList<QSslCertificate> QSslCertificatePrivate::certificatesFromDer(const QByteArray &der, int count) -
829{ -
830 QList<QSslCertificate> certificates; -
831 QSslSocketPrivate::ensureInitialized(); -
832 -
833 -
834 -
835 const unsigned char *data = (const unsigned char *)der.data(); -
836 -
837 -
838 -
839 int size = der.size(); -
840 -
841 while (count == -1 || certificates.size() < count) {
evaluated: count == -1
TRUEFALSE
yes
Evaluation Count:34
yes
Evaluation Count:22
evaluated: certificates.size() < count
TRUEFALSE
yes
Evaluation Count:11
yes
Evaluation Count:11
11-34
842 if (X509 *x509 = q_d2i_X509(0, &data, size)) {
evaluated: X509 *x509 = q_d2i_X509(0, &data, size)
TRUEFALSE
yes
Evaluation Count:11
yes
Evaluation Count:34
11-34
843 certificates << QSslCertificate_from_X509(x509); -
844 q_X509_free(x509); -
845 } else {
executed: }
Execution Count:11
11
846 break;
executed: break;
Execution Count:34
34
847 } -
848 size -= ((char *)data - der.data()); -
849 }
executed: }
Execution Count:11
11
850 -
851 return certificates;
executed: return certificates;
Execution Count:45
45
852} -
853 -
854 -
855 -
856static const char *certificate_blacklist[] = { -
857 "04:7e:cb:e9:fc:a5:5f:7b:d0:9e:ae:36:e1:0c:ae:1e", "mail.google.com", -
858 "f5:c8:6a:f3:61:62:f1:3a:64:f5:4f:6d:c9:58:7c:06", "www.google.com", -
859 "d7:55:8f:da:f5:f1:10:5b:b2:13:28:2b:70:77:29:a3", "login.yahoo.com", -
860 "39:2a:43:4f:0e:07:df:1f:8a:a3:05:de:34:e0:c2:29", "login.yahoo.com", -
861 "3e:75:ce:d4:6b:69:30:21:21:88:30:ae:86:a8:2a:71", "login.yahoo.com", -
862 "e9:02:8b:95:78:e4:15:dc:1a:71:0a:2b:88:15:44:47", "login.skype.com", -
863 "92:39:d5:34:8f:40:d1:69:5a:74:54:70:e1:f2:3f:43", "addons.mozilla.org", -
864 "b0:b7:13:3e:d0:96:f9:b5:6f:ae:91:c8:74:bd:3a:c0", "login.live.com", -
865 "d8:f3:5f:4e:b7:87:2b:2d:ab:06:92:e3:15:38:2f:b0", "global trustee", -
866 -
867 "05:e2:e6:a4:cd:09:ea:54:d6:65:b0:75:fe:22:a2:56", "*.google.com", -
868 "0c:76:da:9c:91:0c:4e:2c:9e:fe:15:d0:58:93:3c:4c", "DigiNotar Root CA", -
869 "f1:4a:13:f4:87:2b:56:dc:39:df:84:ca:7a:a1:06:49", "DigiNotar Services CA", -
870 "36:16:71:55:43:42:1b:9d:e6:cb:a3:64:41:df:24:38", "DigiNotar Services 1024 CA", -
871 "0a:82:bd:1e:14:4e:88:14:d7:5b:1a:55:27:be:bf:3e", "DigiNotar Root CA G2", -
872 "a4:b6:ce:e3:2e:d3:35:46:26:3c:b3:55:3a:a8:92:21", "CertiID Enterprise Certificate Authority", -
873 "5b:d5:60:9c:64:17:68:cf:21:0e:35:fd:fb:05:ad:41", "DigiNotar Qualified CA", -
874 -
875 "46:9c:2c:b0", "DigiNotar Services 1024 CA", -
876 "07:27:10:0d", "DigiNotar Cyber CA", -
877 "07:27:0f:f9", "DigiNotar Cyber CA", -
878 "07:27:10:03", "DigiNotar Cyber CA", -
879 "01:31:69:b0", "DigiNotar PKIoverheid CA Overheid en Bedrijven", -
880 "01:31:34:bf", "DigiNotar PKIoverheid CA Organisatie - G2", -
881 "d6:d0:29:77:f1:49:fd:1a:83:f2:b9:ea:94:8c:5c:b4", "DigiNotar Extended Validation CA", -
882 "1e:7d:7a:53:3d:45:30:41:96:40:0f:71:48:1f:45:04", "DigiNotar Public CA 2025", -
883 -
884 -
885 -
886 "46:9c:2c:af", "DigiNotar Root CA", -
887 "46:9c:3c:c9", "DigiNotar Root CA", -
888 -
889 "07:27:14:a9", "Digisign Server ID (Enrich)", -
890 "4c:0e:63:6a", "Digisign Server ID - (Enrich)", -
891 "72:03:21:05:c5:0c:08:57:3d:8e:a5:30:4e:fe:e8:b0", "UTN-USERFirst-Hardware", -
892 "41", "MD5 Collisions Inc. (http://www.phreedom.org/md5)", -
893 -
894 "08:27", "*.EGO.GOV.TR", -
895 "08:64", "e-islem.kktcmerkezbankasi.org", -
896 0 -
897}; -
898 -
899bool QSslCertificatePrivate::isBlacklisted(const QSslCertificate &certificate) -
900{ -
901 for (int a = 0; certificate_blacklist[a] != 0; a++) {
evaluated: certificate_blacklist[a] != 0
TRUEFALSE
yes
Evaluation Count:2525
yes
Evaluation Count:75
75-2525
902 QString blacklistedCommonName = QString::fromUtf8(certificate_blacklist[(a+1)]); -
903 if (certificate.serialNumber() == certificate_blacklist[a++] &&
evaluated: certificate.serialNumber() == certificate_blacklist[a++]
TRUEFALSE
yes
Evaluation Count:13
yes
Evaluation Count:2512
13-2512
904 (certificate.subjectInfo(QSslCertificate::CommonName).contains(blacklistedCommonName) ||
partially evaluated: certificate.subjectInfo(QSslCertificate::CommonName).contains(blacklistedCommonName)
TRUEFALSE
yes
Evaluation Count:13
no
Evaluation Count:0
0-13
905 certificate.issuerInfo(QSslCertificate::CommonName).contains(blacklistedCommonName)))
never evaluated: certificate.issuerInfo(QSslCertificate::CommonName).contains(blacklistedCommonName)
0
906 return true;
executed: return true;
Execution Count:13
13
907 }
executed: }
Execution Count:2512
2512
908 return false;
executed: return false;
Execution Count:75
75
909} -
910 -
911 -
912QDebug operator<<(QDebug debug, const QSslCertificate &certificate) -
913{ -
914 debug << "QSslCertificate(" -
915 << certificate.version() -
916 << ',' << certificate.serialNumber() -
917 << ',' << certificate.digest().toBase64() -
918 << ',' << certificate.issuerInfo(QSslCertificate::Organization) -
919 << ',' << certificate.subjectInfo(QSslCertificate::Organization) -
920 << ',' << certificate.subjectAlternativeNames() -
921 -
922 << ',' << certificate.effectiveDate() -
923 << ',' << certificate.expiryDate() -
924 -
925 << ')'; -
926 return debug;
never executed: return debug;
0
927} -
928QDebug operator<<(QDebug debug, QSslCertificate::SubjectInfo info) -
929{ -
930 switch (info) { -
931 case QSslCertificate::Organization: debug << "Organization"; break;
never executed: break;
0
932 case QSslCertificate::CommonName: debug << "CommonName"; break;
never executed: break;
0
933 case QSslCertificate::CountryName: debug << "CountryName"; break;
never executed: break;
0
934 case QSslCertificate::LocalityName: debug << "LocalityName"; break;
never executed: break;
0
935 case QSslCertificate::OrganizationalUnitName: debug << "OrganizationalUnitName"; break;
never executed: break;
0
936 case QSslCertificate::StateOrProvinceName: debug << "StateOrProvinceName"; break;
never executed: break;
0
937 case QSslCertificate::DistinguishedNameQualifier: debug << "DistinguishedNameQualifier"; break;
never executed: break;
0
938 case QSslCertificate::SerialNumber: debug << "SerialNumber"; break;
never executed: break;
0
939 case QSslCertificate::EmailAddress: debug << "EmailAddress"; break;
never executed: break;
0
940 } -
941 return debug;
never executed: return debug;
0
942} -
943 -
944 -
945 -
946 -
Switch to Source codePreprocessed file

Generated by Squish Coco Non-Commercial