Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/openssl/src/ssl/ssl_asn1.c |
Source code | Switch to Preprocessed file |
Line | Source | Count | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | /* | - | ||||||||||||||||||
2 | * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. | - | ||||||||||||||||||
3 | * Copyright 2005 Nokia. All rights reserved. | - | ||||||||||||||||||
4 | * | - | ||||||||||||||||||
5 | * Licensed under the OpenSSL license (the "License"). You may not use | - | ||||||||||||||||||
6 | * this file except in compliance with the License. You can obtain a copy | - | ||||||||||||||||||
7 | * in the file LICENSE in the source distribution or at | - | ||||||||||||||||||
8 | * https://www.openssl.org/source/license.html | - | ||||||||||||||||||
9 | */ | - | ||||||||||||||||||
10 | - | |||||||||||||||||||
11 | #include <stdio.h> | - | ||||||||||||||||||
12 | #include <stdlib.h> | - | ||||||||||||||||||
13 | #include "ssl_locl.h" | - | ||||||||||||||||||
14 | #include <openssl/asn1t.h> | - | ||||||||||||||||||
15 | #include <openssl/x509.h> | - | ||||||||||||||||||
16 | - | |||||||||||||||||||
17 | typedef struct { | - | ||||||||||||||||||
18 | uint32_t version; | - | ||||||||||||||||||
19 | int32_t ssl_version; | - | ||||||||||||||||||
20 | ASN1_OCTET_STRING *cipher; | - | ||||||||||||||||||
21 | ASN1_OCTET_STRING *comp_id; | - | ||||||||||||||||||
22 | ASN1_OCTET_STRING *master_key; | - | ||||||||||||||||||
23 | ASN1_OCTET_STRING *session_id; | - | ||||||||||||||||||
24 | ASN1_OCTET_STRING *key_arg; | - | ||||||||||||||||||
25 | int64_t time; | - | ||||||||||||||||||
26 | int64_t timeout; | - | ||||||||||||||||||
27 | X509 *peer; | - | ||||||||||||||||||
28 | ASN1_OCTET_STRING *session_id_context; | - | ||||||||||||||||||
29 | int32_t verify_result; | - | ||||||||||||||||||
30 | ASN1_OCTET_STRING *tlsext_hostname; | - | ||||||||||||||||||
31 | uint64_t tlsext_tick_lifetime_hint; | - | ||||||||||||||||||
32 | uint32_t tlsext_tick_age_add; | - | ||||||||||||||||||
33 | ASN1_OCTET_STRING *tlsext_tick; | - | ||||||||||||||||||
34 | #ifndef OPENSSL_NO_PSK | - | ||||||||||||||||||
35 | ASN1_OCTET_STRING *psk_identity_hint; | - | ||||||||||||||||||
36 | ASN1_OCTET_STRING *psk_identity; | - | ||||||||||||||||||
37 | #endif | - | ||||||||||||||||||
38 | #ifndef OPENSSL_NO_SRP | - | ||||||||||||||||||
39 | ASN1_OCTET_STRING *srp_username; | - | ||||||||||||||||||
40 | #endif | - | ||||||||||||||||||
41 | uint64_t flags; | - | ||||||||||||||||||
42 | uint32_t max_early_data; | - | ||||||||||||||||||
43 | ASN1_OCTET_STRING *alpn_selected; | - | ||||||||||||||||||
44 | uint32_t tlsext_max_fragment_len_mode; | - | ||||||||||||||||||
45 | ASN1_OCTET_STRING *ticket_appdata; | - | ||||||||||||||||||
46 | } SSL_SESSION_ASN1; | - | ||||||||||||||||||
47 | - | |||||||||||||||||||
48 | ASN1_SEQUENCE(SSL_SESSION_ASN1) = { | - | ||||||||||||||||||
49 | ASN1_EMBED(SSL_SESSION_ASN1, version, UINT32), | - | ||||||||||||||||||
50 | ASN1_EMBED(SSL_SESSION_ASN1, ssl_version, INT32), | - | ||||||||||||||||||
51 | ASN1_SIMPLE(SSL_SESSION_ASN1, cipher, ASN1_OCTET_STRING), | - | ||||||||||||||||||
52 | ASN1_SIMPLE(SSL_SESSION_ASN1, session_id, ASN1_OCTET_STRING), | - | ||||||||||||||||||
53 | ASN1_SIMPLE(SSL_SESSION_ASN1, master_key, ASN1_OCTET_STRING), | - | ||||||||||||||||||
54 | ASN1_IMP_OPT(SSL_SESSION_ASN1, key_arg, ASN1_OCTET_STRING, 0), | - | ||||||||||||||||||
55 | ASN1_EXP_OPT_EMBED(SSL_SESSION_ASN1, time, ZINT64, 1), | - | ||||||||||||||||||
56 | ASN1_EXP_OPT_EMBED(SSL_SESSION_ASN1, timeout, ZINT64, 2), | - | ||||||||||||||||||
57 | ASN1_EXP_OPT(SSL_SESSION_ASN1, peer, X509, 3), | - | ||||||||||||||||||
58 | ASN1_EXP_OPT(SSL_SESSION_ASN1, session_id_context, ASN1_OCTET_STRING, 4), | - | ||||||||||||||||||
59 | ASN1_EXP_OPT_EMBED(SSL_SESSION_ASN1, verify_result, ZINT32, 5), | - | ||||||||||||||||||
60 | ASN1_EXP_OPT(SSL_SESSION_ASN1, tlsext_hostname, ASN1_OCTET_STRING, 6), | - | ||||||||||||||||||
61 | #ifndef OPENSSL_NO_PSK | - | ||||||||||||||||||
62 | ASN1_EXP_OPT(SSL_SESSION_ASN1, psk_identity_hint, ASN1_OCTET_STRING, 7), | - | ||||||||||||||||||
63 | ASN1_EXP_OPT(SSL_SESSION_ASN1, psk_identity, ASN1_OCTET_STRING, 8), | - | ||||||||||||||||||
64 | #endif | - | ||||||||||||||||||
65 | ASN1_EXP_OPT_EMBED(SSL_SESSION_ASN1, tlsext_tick_lifetime_hint, ZUINT64, 9), | - | ||||||||||||||||||
66 | ASN1_EXP_OPT(SSL_SESSION_ASN1, tlsext_tick, ASN1_OCTET_STRING, 10), | - | ||||||||||||||||||
67 | ASN1_EXP_OPT(SSL_SESSION_ASN1, comp_id, ASN1_OCTET_STRING, 11), | - | ||||||||||||||||||
68 | #ifndef OPENSSL_NO_SRP | - | ||||||||||||||||||
69 | ASN1_EXP_OPT(SSL_SESSION_ASN1, srp_username, ASN1_OCTET_STRING, 12), | - | ||||||||||||||||||
70 | #endif | - | ||||||||||||||||||
71 | ASN1_EXP_OPT_EMBED(SSL_SESSION_ASN1, flags, ZUINT64, 13), | - | ||||||||||||||||||
72 | ASN1_EXP_OPT_EMBED(SSL_SESSION_ASN1, tlsext_tick_age_add, ZUINT32, 14), | - | ||||||||||||||||||
73 | ASN1_EXP_OPT_EMBED(SSL_SESSION_ASN1, max_early_data, ZUINT32, 15), | - | ||||||||||||||||||
74 | ASN1_EXP_OPT(SSL_SESSION_ASN1, alpn_selected, ASN1_OCTET_STRING, 16), | - | ||||||||||||||||||
75 | ASN1_EXP_OPT_EMBED(SSL_SESSION_ASN1, tlsext_max_fragment_len_mode, ZUINT32, 17), | - | ||||||||||||||||||
76 | ASN1_EXP_OPT(SSL_SESSION_ASN1, ticket_appdata, ASN1_OCTET_STRING, 18) | - | ||||||||||||||||||
77 | } static_ASN1_SEQUENCE_END(SSL_SESSION_ASN1) | - | ||||||||||||||||||
78 | - | |||||||||||||||||||
79 | IMPLEMENT_STATIC_ASN1_ENCODE_FUNCTIONS(SSL_SESSION_ASN1) executed 5314 times by 1 test: return (SSL_SESSION_ASN1 *)ASN1_item_d2i((ASN1_VALUE **)a, in, len, (&(SSL_SESSION_ASN1_it))); Executed by:
executed 7274 times by 1 test: return ASN1_item_i2d((ASN1_VALUE *)a, out, (&(SSL_SESSION_ASN1_it))); Executed by:
| 5314-7274 | ||||||||||||||||||
80 | - | |||||||||||||||||||
81 | /* Utility functions for i2d_SSL_SESSION */ | - | ||||||||||||||||||
82 | - | |||||||||||||||||||
83 | /* Initialise OCTET STRING from buffer and length */ | - | ||||||||||||||||||
84 | - | |||||||||||||||||||
85 | static void ssl_session_oinit(ASN1_OCTET_STRING **dest, ASN1_OCTET_STRING *os, | - | ||||||||||||||||||
86 | unsigned char *data, size_t len) | - | ||||||||||||||||||
87 | { | - | ||||||||||||||||||
88 | os->data = data; | - | ||||||||||||||||||
89 | os->length = (int)len; | - | ||||||||||||||||||
90 | os->flags = 0; | - | ||||||||||||||||||
91 | *dest = os; | - | ||||||||||||||||||
92 | } executed 29714 times by 1 test: end of block Executed by:
| 29714 | ||||||||||||||||||
93 | - | |||||||||||||||||||
94 | /* Initialise OCTET STRING from string */ | - | ||||||||||||||||||
95 | static void ssl_session_sinit(ASN1_OCTET_STRING **dest, ASN1_OCTET_STRING *os, | - | ||||||||||||||||||
96 | char *data) | - | ||||||||||||||||||
97 | { | - | ||||||||||||||||||
98 | if (data != NULL)
| 319-28777 | ||||||||||||||||||
99 | ssl_session_oinit(dest, os, (unsigned char *)data, strlen(data)); executed 319 times by 1 test: ssl_session_oinit(dest, os, (unsigned char *)data, strlen(data)); Executed by:
| 319 | ||||||||||||||||||
100 | else | - | ||||||||||||||||||
101 | *dest = NULL; executed 28777 times by 1 test: *dest = ((void *)0) ; Executed by:
| 28777 | ||||||||||||||||||
102 | } | - | ||||||||||||||||||
103 | - | |||||||||||||||||||
104 | int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) | - | ||||||||||||||||||
105 | { | - | ||||||||||||||||||
106 | - | |||||||||||||||||||
107 | SSL_SESSION_ASN1 as; | - | ||||||||||||||||||
108 | - | |||||||||||||||||||
109 | ASN1_OCTET_STRING cipher; | - | ||||||||||||||||||
110 | unsigned char cipher_data[2]; | - | ||||||||||||||||||
111 | ASN1_OCTET_STRING master_key, session_id, sid_ctx; | - | ||||||||||||||||||
112 | - | |||||||||||||||||||
113 | #ifndef OPENSSL_NO_COMP | - | ||||||||||||||||||
114 | ASN1_OCTET_STRING comp_id; | - | ||||||||||||||||||
115 | unsigned char comp_id_data; | - | ||||||||||||||||||
116 | #endif | - | ||||||||||||||||||
117 | ASN1_OCTET_STRING tlsext_hostname, tlsext_tick; | - | ||||||||||||||||||
118 | #ifndef OPENSSL_NO_SRP | - | ||||||||||||||||||
119 | ASN1_OCTET_STRING srp_username; | - | ||||||||||||||||||
120 | #endif | - | ||||||||||||||||||
121 | #ifndef OPENSSL_NO_PSK | - | ||||||||||||||||||
122 | ASN1_OCTET_STRING psk_identity, psk_identity_hint; | - | ||||||||||||||||||
123 | #endif | - | ||||||||||||||||||
124 | ASN1_OCTET_STRING alpn_selected; | - | ||||||||||||||||||
125 | ASN1_OCTET_STRING ticket_appdata; | - | ||||||||||||||||||
126 | - | |||||||||||||||||||
127 | long l; | - | ||||||||||||||||||
128 | - | |||||||||||||||||||
129 | if ((in == NULL) || ((in->cipher == NULL) && (in->cipher_id == 0)))
| 0-7274 | ||||||||||||||||||
130 | return 0; never executed: return 0; | 0 | ||||||||||||||||||
131 | - | |||||||||||||||||||
132 | memset(&as, 0, sizeof(as)); | - | ||||||||||||||||||
133 | - | |||||||||||||||||||
134 | as.version = SSL_SESSION_ASN1_VERSION; | - | ||||||||||||||||||
135 | as.ssl_version = in->ssl_version; | - | ||||||||||||||||||
136 | - | |||||||||||||||||||
137 | if (in->cipher == NULL)
| 0-7274 | ||||||||||||||||||
138 | l = in->cipher_id; never executed: l = in->cipher_id; | 0 | ||||||||||||||||||
139 | else | - | ||||||||||||||||||
140 | l = in->cipher->id; executed 7274 times by 1 test: l = in->cipher->id; Executed by:
| 7274 | ||||||||||||||||||
141 | cipher_data[0] = ((unsigned char)(l >> 8L)) & 0xff; | - | ||||||||||||||||||
142 | cipher_data[1] = ((unsigned char)(l)) & 0xff; | - | ||||||||||||||||||
143 | - | |||||||||||||||||||
144 | ssl_session_oinit(&as.cipher, &cipher, cipher_data, 2); | - | ||||||||||||||||||
145 | - | |||||||||||||||||||
146 | #ifndef OPENSSL_NO_COMP | - | ||||||||||||||||||
147 | if (in->compress_meth) {
| 0-7274 | ||||||||||||||||||
148 | comp_id_data = (unsigned char)in->compress_meth; | - | ||||||||||||||||||
149 | ssl_session_oinit(&as.comp_id, &comp_id, &comp_id_data, 1); | - | ||||||||||||||||||
150 | } never executed: end of block | 0 | ||||||||||||||||||
151 | #endif | - | ||||||||||||||||||
152 | - | |||||||||||||||||||
153 | ssl_session_oinit(&as.master_key, &master_key, | - | ||||||||||||||||||
154 | in->master_key, in->master_key_length); | - | ||||||||||||||||||
155 | - | |||||||||||||||||||
156 | ssl_session_oinit(&as.session_id, &session_id, | - | ||||||||||||||||||
157 | in->session_id, in->session_id_length); | - | ||||||||||||||||||
158 | - | |||||||||||||||||||
159 | ssl_session_oinit(&as.session_id_context, &sid_ctx, | - | ||||||||||||||||||
160 | in->sid_ctx, in->sid_ctx_length); | - | ||||||||||||||||||
161 | - | |||||||||||||||||||
162 | as.time = in->time; | - | ||||||||||||||||||
163 | as.timeout = in->timeout; | - | ||||||||||||||||||
164 | as.verify_result = in->verify_result; | - | ||||||||||||||||||
165 | - | |||||||||||||||||||
166 | as.peer = in->peer; | - | ||||||||||||||||||
167 | - | |||||||||||||||||||
168 | ssl_session_sinit(&as.tlsext_hostname, &tlsext_hostname, | - | ||||||||||||||||||
169 | in->ext.hostname); | - | ||||||||||||||||||
170 | if (in->ext.tick) {
| 41-7233 | ||||||||||||||||||
171 | ssl_session_oinit(&as.tlsext_tick, &tlsext_tick, | - | ||||||||||||||||||
172 | in->ext.tick, in->ext.ticklen); | - | ||||||||||||||||||
173 | } executed 41 times by 1 test: end of block Executed by:
| 41 | ||||||||||||||||||
174 | if (in->ext.tick_lifetime_hint > 0)
| 41-7233 | ||||||||||||||||||
175 | as.tlsext_tick_lifetime_hint = in->ext.tick_lifetime_hint; executed 41 times by 1 test: as.tlsext_tick_lifetime_hint = in->ext.tick_lifetime_hint; Executed by:
| 41 | ||||||||||||||||||
176 | as.tlsext_tick_age_add = in->ext.tick_age_add; | - | ||||||||||||||||||
177 | #ifndef OPENSSL_NO_PSK | - | ||||||||||||||||||
178 | ssl_session_sinit(&as.psk_identity_hint, &psk_identity_hint, | - | ||||||||||||||||||
179 | in->psk_identity_hint); | - | ||||||||||||||||||
180 | ssl_session_sinit(&as.psk_identity, &psk_identity, in->psk_identity); | - | ||||||||||||||||||
181 | #endif /* OPENSSL_NO_PSK */ | - | ||||||||||||||||||
182 | #ifndef OPENSSL_NO_SRP | - | ||||||||||||||||||
183 | ssl_session_sinit(&as.srp_username, &srp_username, in->srp_username); | - | ||||||||||||||||||
184 | #endif /* OPENSSL_NO_SRP */ | - | ||||||||||||||||||
185 | - | |||||||||||||||||||
186 | as.flags = in->flags; | - | ||||||||||||||||||
187 | as.max_early_data = in->ext.max_early_data; | - | ||||||||||||||||||
188 | - | |||||||||||||||||||
189 | if (in->ext.alpn_selected == NULL)
| 141-7133 | ||||||||||||||||||
190 | as.alpn_selected = NULL; executed 7133 times by 1 test: as.alpn_selected = ((void *)0) ; Executed by:
| 7133 | ||||||||||||||||||
191 | else | - | ||||||||||||||||||
192 | ssl_session_oinit(&as.alpn_selected, &alpn_selected, executed 141 times by 1 test: ssl_session_oinit(&as.alpn_selected, &alpn_selected, in->ext.alpn_selected, in->ext.alpn_selected_len); Executed by:
| 141 | ||||||||||||||||||
193 | in->ext.alpn_selected, in->ext.alpn_selected_len); executed 141 times by 1 test: ssl_session_oinit(&as.alpn_selected, &alpn_selected, in->ext.alpn_selected, in->ext.alpn_selected_len); Executed by:
| 141 | ||||||||||||||||||
194 | - | |||||||||||||||||||
195 | as.tlsext_max_fragment_len_mode = in->ext.max_fragment_len_mode; | - | ||||||||||||||||||
196 | - | |||||||||||||||||||
197 | if (in->ticket_appdata == NULL)
| 117-7157 | ||||||||||||||||||
198 | as.ticket_appdata = NULL; executed 7157 times by 1 test: as.ticket_appdata = ((void *)0) ; Executed by:
| 7157 | ||||||||||||||||||
199 | else | - | ||||||||||||||||||
200 | ssl_session_oinit(&as.ticket_appdata, &ticket_appdata, executed 117 times by 1 test: ssl_session_oinit(&as.ticket_appdata, &ticket_appdata, in->ticket_appdata, in->ticket_appdata_len); Executed by:
| 117 | ||||||||||||||||||
201 | in->ticket_appdata, in->ticket_appdata_len); executed 117 times by 1 test: ssl_session_oinit(&as.ticket_appdata, &ticket_appdata, in->ticket_appdata, in->ticket_appdata_len); Executed by:
| 117 | ||||||||||||||||||
202 | - | |||||||||||||||||||
203 | return i2d_SSL_SESSION_ASN1(&as, pp); executed 7274 times by 1 test: return i2d_SSL_SESSION_ASN1(&as, pp); Executed by:
| 7274 | ||||||||||||||||||
204 | - | |||||||||||||||||||
205 | } | - | ||||||||||||||||||
206 | - | |||||||||||||||||||
207 | /* Utility functions for d2i_SSL_SESSION */ | - | ||||||||||||||||||
208 | - | |||||||||||||||||||
209 | /* OPENSSL_strndup an OCTET STRING */ | - | ||||||||||||||||||
210 | - | |||||||||||||||||||
211 | static int ssl_session_strndup(char **pdst, ASN1_OCTET_STRING *src) | - | ||||||||||||||||||
212 | { | - | ||||||||||||||||||
213 | OPENSSL_free(*pdst); | - | ||||||||||||||||||
214 | *pdst = NULL; | - | ||||||||||||||||||
215 | if (src == NULL)
| 132-7886 | ||||||||||||||||||
216 | return 1; executed 7886 times by 1 test: return 1; Executed by:
| 7886 | ||||||||||||||||||
217 | *pdst = OPENSSL_strndup((char *)src->data, src->length); | - | ||||||||||||||||||
218 | if (*pdst == NULL)
| 0-132 | ||||||||||||||||||
219 | return 0; never executed: return 0; | 0 | ||||||||||||||||||
220 | return 1; executed 132 times by 1 test: return 1; Executed by:
| 132 | ||||||||||||||||||
221 | } | - | ||||||||||||||||||
222 | - | |||||||||||||||||||
223 | /* Copy an OCTET STRING, return error if it exceeds maximum length */ | - | ||||||||||||||||||
224 | - | |||||||||||||||||||
225 | static int ssl_session_memcpy(unsigned char *dst, size_t *pdstlen, | - | ||||||||||||||||||
226 | ASN1_OCTET_STRING *src, size_t maxlen) | - | ||||||||||||||||||
227 | { | - | ||||||||||||||||||
228 | if (src == NULL) {
| 72-5945 | ||||||||||||||||||
229 | *pdstlen = 0; | - | ||||||||||||||||||
230 | return 1; executed 72 times by 1 test: return 1; Executed by:
| 72 | ||||||||||||||||||
231 | } | - | ||||||||||||||||||
232 | if (src->length < 0 || src->length > (int)maxlen)
| 0-5945 | ||||||||||||||||||
233 | return 0; executed 2 times by 1 test: return 0; Executed by:
| 2 | ||||||||||||||||||
234 | memcpy(dst, src->data, src->length); | - | ||||||||||||||||||
235 | *pdstlen = src->length; | - | ||||||||||||||||||
236 | return 1; executed 5943 times by 1 test: return 1; Executed by:
| 5943 | ||||||||||||||||||
237 | } | - | ||||||||||||||||||
238 | - | |||||||||||||||||||
239 | SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp, | - | ||||||||||||||||||
240 | long length) | - | ||||||||||||||||||
241 | { | - | ||||||||||||||||||
242 | long id; | - | ||||||||||||||||||
243 | size_t tmpl; | - | ||||||||||||||||||
244 | const unsigned char *p = *pp; | - | ||||||||||||||||||
245 | SSL_SESSION_ASN1 *as = NULL; | - | ||||||||||||||||||
246 | SSL_SESSION *ret = NULL; | - | ||||||||||||||||||
247 | - | |||||||||||||||||||
248 | as = d2i_SSL_SESSION_ASN1(NULL, &p, length); | - | ||||||||||||||||||
249 | /* ASN.1 code returns suitable error */ | - | ||||||||||||||||||
250 | if (as == NULL)
| 2016-3298 | ||||||||||||||||||
251 | goto err; executed 3298 times by 1 test: goto err; Executed by:
| 3298 | ||||||||||||||||||
252 | - | |||||||||||||||||||
253 | if (!a || !*a) {
| 0-2016 | ||||||||||||||||||
254 | ret = SSL_SESSION_new(); | - | ||||||||||||||||||
255 | if (ret == NULL)
| 0-2016 | ||||||||||||||||||
256 | goto err; never executed: goto err; | 0 | ||||||||||||||||||
257 | } else { executed 2016 times by 1 test: end of block Executed by:
| 2016 | ||||||||||||||||||
258 | ret = *a; | - | ||||||||||||||||||
259 | } never executed: end of block | 0 | ||||||||||||||||||
260 | - | |||||||||||||||||||
261 | if (as->version != SSL_SESSION_ASN1_VERSION) {
| 2-2014 | ||||||||||||||||||
262 | SSLerr(SSL_F_D2I_SSL_SESSION, SSL_R_UNKNOWN_SSL_VERSION); | - | ||||||||||||||||||
263 | goto err; executed 2 times by 1 test: goto err; Executed by:
| 2 | ||||||||||||||||||
264 | } | - | ||||||||||||||||||
265 | - | |||||||||||||||||||
266 | if ((as->ssl_version >> 8) != SSL3_VERSION_MAJOR
| 165-1849 | ||||||||||||||||||
267 | && (as->ssl_version >> 8) != DTLS1_VERSION_MAJOR
| 5-160 | ||||||||||||||||||
268 | && as->ssl_version != DTLS1_BAD_VER) {
| 2-3 | ||||||||||||||||||
269 | SSLerr(SSL_F_D2I_SSL_SESSION, SSL_R_UNSUPPORTED_SSL_VERSION); | - | ||||||||||||||||||
270 | goto err; executed 2 times by 1 test: goto err; Executed by:
| 2 | ||||||||||||||||||
271 | } | - | ||||||||||||||||||
272 | - | |||||||||||||||||||
273 | ret->ssl_version = (int)as->ssl_version; | - | ||||||||||||||||||
274 | - | |||||||||||||||||||
275 | if (as->cipher->length != 2) {
| 1-2011 | ||||||||||||||||||
276 | SSLerr(SSL_F_D2I_SSL_SESSION, SSL_R_CIPHER_CODE_WRONG_LENGTH); | - | ||||||||||||||||||
277 | goto err; executed 1 time by 1 test: goto err; Executed by:
| 1 | ||||||||||||||||||
278 | } | - | ||||||||||||||||||
279 | - | |||||||||||||||||||
280 | id = 0x03000000L | ((unsigned long)as->cipher->data[0] << 8L) | - | ||||||||||||||||||
281 | | (unsigned long)as->cipher->data[1]; | - | ||||||||||||||||||
282 | - | |||||||||||||||||||
283 | ret->cipher_id = id; | - | ||||||||||||||||||
284 | ret->cipher = ssl3_get_cipher_by_id(id); | - | ||||||||||||||||||
285 | if (ret->cipher == NULL)
| 4-2007 | ||||||||||||||||||
286 | goto err; executed 4 times by 1 test: goto err; Executed by:
| 4 | ||||||||||||||||||
287 | - | |||||||||||||||||||
288 | if (!ssl_session_memcpy(ret->session_id, &ret->session_id_length,
| 2-2005 | ||||||||||||||||||
289 | as->session_id, SSL3_MAX_SSL_SESSION_ID_LENGTH))
| 2-2005 | ||||||||||||||||||
290 | goto err; executed 2 times by 1 test: goto err; Executed by:
| 2 | ||||||||||||||||||
291 | - | |||||||||||||||||||
292 | if (!ssl_session_memcpy(ret->master_key, &tmpl,
| 0-2005 | ||||||||||||||||||
293 | as->master_key, TLS13_MAX_RESUMPTION_PSK_LENGTH))
| 0-2005 | ||||||||||||||||||
294 | goto err; never executed: goto err; | 0 | ||||||||||||||||||
295 | - | |||||||||||||||||||
296 | ret->master_key_length = tmpl; | - | ||||||||||||||||||
297 | - | |||||||||||||||||||
298 | if (as->time != 0)
| 45-1960 | ||||||||||||||||||
299 | ret->time = (long)as->time; executed 1960 times by 1 test: ret->time = (long)as->time; Executed by:
| 1960 | ||||||||||||||||||
300 | else | - | ||||||||||||||||||
301 | ret->time = (long)time(NULL); executed 45 times by 1 test: ret->time = (long)time( ((void *)0) ); Executed by:
| 45 | ||||||||||||||||||
302 | - | |||||||||||||||||||
303 | if (as->timeout != 0)
| 44-1961 | ||||||||||||||||||
304 | ret->timeout = (long)as->timeout; executed 1961 times by 1 test: ret->timeout = (long)as->timeout; Executed by:
| 1961 | ||||||||||||||||||
305 | else | - | ||||||||||||||||||
306 | ret->timeout = 3; executed 44 times by 1 test: ret->timeout = 3; Executed by:
| 44 | ||||||||||||||||||
307 | - | |||||||||||||||||||
308 | X509_free(ret->peer); | - | ||||||||||||||||||
309 | ret->peer = as->peer; | - | ||||||||||||||||||
310 | as->peer = NULL; | - | ||||||||||||||||||
311 | - | |||||||||||||||||||
312 | if (!ssl_session_memcpy(ret->sid_ctx, &ret->sid_ctx_length,
| 0-2005 | ||||||||||||||||||
313 | as->session_id_context, SSL_MAX_SID_CTX_LENGTH))
| 0-2005 | ||||||||||||||||||
314 | goto err; never executed: goto err; | 0 | ||||||||||||||||||
315 | - | |||||||||||||||||||
316 | /* NB: this defaults to zero which is X509_V_OK */ | - | ||||||||||||||||||
317 | ret->verify_result = as->verify_result; | - | ||||||||||||||||||
318 | - | |||||||||||||||||||
319 | if (!ssl_session_strndup(&ret->ext.hostname, as->tlsext_hostname))
| 0-2005 | ||||||||||||||||||
320 | goto err; never executed: goto err; | 0 | ||||||||||||||||||
321 | - | |||||||||||||||||||
322 | #ifndef OPENSSL_NO_PSK | - | ||||||||||||||||||
323 | if (!ssl_session_strndup(&ret->psk_identity_hint, as->psk_identity_hint))
| 0-2005 | ||||||||||||||||||
324 | goto err; never executed: goto err; | 0 | ||||||||||||||||||
325 | if (!ssl_session_strndup(&ret->psk_identity, as->psk_identity))
| 0-2005 | ||||||||||||||||||
326 | goto err; never executed: goto err; | 0 | ||||||||||||||||||
327 | #endif | - | ||||||||||||||||||
328 | - | |||||||||||||||||||
329 | ret->ext.tick_lifetime_hint = (unsigned long)as->tlsext_tick_lifetime_hint; | - | ||||||||||||||||||
330 | ret->ext.tick_age_add = as->tlsext_tick_age_add; | - | ||||||||||||||||||
331 | OPENSSL_free(ret->ext.tick); | - | ||||||||||||||||||
332 | if (as->tlsext_tick != NULL) {
| 35-1970 | ||||||||||||||||||
333 | ret->ext.tick = as->tlsext_tick->data; | - | ||||||||||||||||||
334 | ret->ext.ticklen = as->tlsext_tick->length; | - | ||||||||||||||||||
335 | as->tlsext_tick->data = NULL; | - | ||||||||||||||||||
336 | } else { executed 35 times by 1 test: end of block Executed by:
| 35 | ||||||||||||||||||
337 | ret->ext.tick = NULL; | - | ||||||||||||||||||
338 | } executed 1970 times by 1 test: end of block Executed by:
| 1970 | ||||||||||||||||||
339 | #ifndef OPENSSL_NO_COMP | - | ||||||||||||||||||
340 | if (as->comp_id) {
| 2-2003 | ||||||||||||||||||
341 | if (as->comp_id->length != 1) {
| 0-2 | ||||||||||||||||||
342 | SSLerr(SSL_F_D2I_SSL_SESSION, SSL_R_BAD_LENGTH); | - | ||||||||||||||||||
343 | goto err; executed 2 times by 1 test: goto err; Executed by:
| 2 | ||||||||||||||||||
344 | } | - | ||||||||||||||||||
345 | ret->compress_meth = as->comp_id->data[0]; | - | ||||||||||||||||||
346 | } else { never executed: end of block | 0 | ||||||||||||||||||
347 | ret->compress_meth = 0; | - | ||||||||||||||||||
348 | } executed 2003 times by 1 test: end of block Executed by:
| 2003 | ||||||||||||||||||
349 | #endif | - | ||||||||||||||||||
350 | - | |||||||||||||||||||
351 | #ifndef OPENSSL_NO_SRP | - | ||||||||||||||||||
352 | if (!ssl_session_strndup(&ret->srp_username, as->srp_username))
| 0-2003 | ||||||||||||||||||
353 | goto err; never executed: goto err; | 0 | ||||||||||||||||||
354 | #endif /* OPENSSL_NO_SRP */ | - | ||||||||||||||||||
355 | /* Flags defaults to zero which is fine */ | - | ||||||||||||||||||
356 | ret->flags = (int32_t)as->flags; | - | ||||||||||||||||||
357 | ret->ext.max_early_data = as->max_early_data; | - | ||||||||||||||||||
358 | - | |||||||||||||||||||
359 | OPENSSL_free(ret->ext.alpn_selected); | - | ||||||||||||||||||
360 | if (as->alpn_selected != NULL) {
| 43-1960 | ||||||||||||||||||
361 | ret->ext.alpn_selected = as->alpn_selected->data; | - | ||||||||||||||||||
362 | ret->ext.alpn_selected_len = as->alpn_selected->length; | - | ||||||||||||||||||
363 | as->alpn_selected->data = NULL; | - | ||||||||||||||||||
364 | } else { executed 43 times by 1 test: end of block Executed by:
| 43 | ||||||||||||||||||
365 | ret->ext.alpn_selected = NULL; | - | ||||||||||||||||||
366 | ret->ext.alpn_selected_len = 0; | - | ||||||||||||||||||
367 | } executed 1960 times by 1 test: end of block Executed by:
| 1960 | ||||||||||||||||||
368 | - | |||||||||||||||||||
369 | ret->ext.max_fragment_len_mode = as->tlsext_max_fragment_len_mode; | - | ||||||||||||||||||
370 | - | |||||||||||||||||||
371 | OPENSSL_free(ret->ticket_appdata); | - | ||||||||||||||||||
372 | if (as->ticket_appdata != NULL) {
| 44-1959 | ||||||||||||||||||
373 | ret->ticket_appdata = as->ticket_appdata->data; | - | ||||||||||||||||||
374 | ret->ticket_appdata_len = as->ticket_appdata->length; | - | ||||||||||||||||||
375 | as->ticket_appdata->data = NULL; | - | ||||||||||||||||||
376 | } else { executed 44 times by 1 test: end of block Executed by:
| 44 | ||||||||||||||||||
377 | ret->ticket_appdata = NULL; | - | ||||||||||||||||||
378 | ret->ticket_appdata_len = 0; | - | ||||||||||||||||||
379 | } executed 1959 times by 1 test: end of block Executed by:
| 1959 | ||||||||||||||||||
380 | - | |||||||||||||||||||
381 | M_ASN1_free_of(as, SSL_SESSION_ASN1); | - | ||||||||||||||||||
382 | - | |||||||||||||||||||
383 | if ((a != NULL) && (*a == NULL))
| 0-2003 | ||||||||||||||||||
384 | *a = ret; never executed: *a = ret; | 0 | ||||||||||||||||||
385 | *pp = p; | - | ||||||||||||||||||
386 | return ret; executed 2003 times by 1 test: return ret; Executed by:
| 2003 | ||||||||||||||||||
387 | - | |||||||||||||||||||
388 | err: | - | ||||||||||||||||||
389 | M_ASN1_free_of(as, SSL_SESSION_ASN1); | - | ||||||||||||||||||
390 | if ((a == NULL) || (*a != ret))
| 0-3311 | ||||||||||||||||||
391 | SSL_SESSION_free(ret); executed 3311 times by 1 test: SSL_SESSION_free(ret); Executed by:
| 3311 | ||||||||||||||||||
392 | return NULL; executed 3311 times by 1 test: return ((void *)0) ; Executed by:
| 3311 | ||||||||||||||||||
393 | } | - | ||||||||||||||||||
Source code | Switch to Preprocessed file |