OpenCoverage

packet_locl.h

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssl/src/ssl/packet_locl.h
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2 * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved.-
3 *-
4 * Licensed under the OpenSSL license (the "License"). You may not use-
5 * this file except in compliance with the License. You can obtain a copy-
6 * in the file LICENSE in the source distribution or at-
7 * https://www.openssl.org/source/license.html-
8 */-
9-
10#ifndef HEADER_PACKET_LOCL_H-
11# define HEADER_PACKET_LOCL_H-
12-
13# include <string.h>-
14# include <openssl/bn.h>-
15# include <openssl/buffer.h>-
16# include <openssl/crypto.h>-
17# include <openssl/e_os2.h>-
18-
19# include "internal/numbers.h"-
20-
21typedef struct {-
22 /* Pointer to where we are currently reading from */-
23 const unsigned char *curr;-
24 /* Number of bytes remaining */-
25 size_t remaining;-
26} PACKET;-
27-
28/* Internal unchecked shorthand; don't use outside this file. */-
29static ossl_inline void packet_forward(PACKET *pkt, size_t len)-
30{-
31 pkt->curr += len;-
32 pkt->remaining -= len;-
33}
executed 686115 times by 8 tests: end of block
Executed by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
686115
34-
35/*-
36 * Returns the number of bytes remaining to be read in the PACKET-
37 */-
38static ossl_inline size_t PACKET_remaining(const PACKET *pkt)-
39{-
40 return pkt->remaining;
executed 890144 times by 8 tests: return pkt->remaining;
Executed by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
890144
41}-
42-
43/*-
44 * Returns a pointer to the first byte after the packet data.-
45 * Useful for integrating with non-PACKET parsing code.-
46 * Specifically, we use PACKET_end() to verify that a d2i_... call-
47 * has consumed the entire packet contents.-
48 */-
49static ossl_inline const unsigned char *PACKET_end(const PACKET *pkt)-
50{-
51 return pkt->curr + pkt->remaining;
executed 29 times by 2 tests: return pkt->curr + pkt->remaining;
Executed by:
  • libssl.so.1.1
  • packettest
29
52}-
53-
54/*-
55 * Returns a pointer to the PACKET's current position.-
56 * For use in non-PACKETized APIs.-
57 */-
58static ossl_inline const unsigned char *PACKET_data(const PACKET *pkt)-
59{-
60 return pkt->curr;
executed 18283 times by 3 tests: return pkt->curr;
Executed by:
  • libssl.so.1.1
  • packettest
  • tls13ccstest
18283
61}-
62-
63/*-
64 * Initialise a PACKET with |len| bytes held in |buf|. This does not make a-
65 * copy of the data so |buf| must be present for the whole time that the PACKET-
66 * is being used.-
67 */-
68__owur static ossl_inline int PACKET_buf_init(PACKET *pkt,-
69 const unsigned char *buf,-
70 size_t len)-
71{-
72 /* Sanity check for negative values. */-
73 if (len > (size_t)(SIZE_MAX / 2))
len > (size_t)...551615UL) / 2)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • packettest
FALSEevaluated 80687 times by 8 tests
Evaluated by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
1-80687
74 return 0;
executed 1 time by 1 test: return 0;
Executed by:
  • packettest
1
75-
76 pkt->curr = buf;-
77 pkt->remaining = len;-
78 return 1;
executed 80687 times by 8 tests: return 1;
Executed by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
80687
79}-
80-
81/* Initialize a PACKET to hold zero bytes. */-
82static ossl_inline void PACKET_null_init(PACKET *pkt)-
83{-
84 pkt->curr = NULL;-
85 pkt->remaining = 0;-
86}
executed 6090 times by 2 tests: end of block
Executed by:
  • libssl.so.1.1
  • packettest
6090
87-
88/*-
89 * Returns 1 if the packet has length |num| and its contents equal the |num|-
90 * bytes read from |ptr|. Returns 0 otherwise (lengths or contents not equal).-
91 * If lengths are equal, performs the comparison in constant time.-
92 */-
93__owur static ossl_inline int PACKET_equal(const PACKET *pkt, const void *ptr,-
94 size_t num)-
95{-
96 if (PACKET_remaining(pkt) != num)
PACKET_remaining(pkt) != numDescription
TRUEevaluated 7 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
FALSEevaluated 46 times by 4 tests
Evaluated by:
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
7-46
97 return 0;
executed 7 times by 2 tests: return 0;
Executed by:
  • libssl.so.1.1
  • packettest
7
98 return CRYPTO_memcmp(pkt->curr, ptr, num) == 0;
executed 46 times by 4 tests: return CRYPTO_memcmp(pkt->curr, ptr, num) == 0;
Executed by:
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
46
99}-
100-
101/*-
102 * Peek ahead and initialize |subpkt| with the next |len| bytes read from |pkt|.-
103 * Data is not copied: the |subpkt| packet will share its underlying buffer with-
104 * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|.-
105 */-
106__owur static ossl_inline int PACKET_peek_sub_packet(const PACKET *pkt,-
107 PACKET *subpkt, size_t len)-
108{-
109 if (PACKET_remaining(pkt) < len)
PACKET_remaining(pkt) < lenDescription
TRUEevaluated 3 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
FALSEevaluated 1620 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
3-1620
110 return 0;
executed 3 times by 2 tests: return 0;
Executed by:
  • libssl.so.1.1
  • packettest
3
111-
112 return PACKET_buf_init(subpkt, pkt->curr, len);
executed 1620 times by 2 tests: return PACKET_buf_init(subpkt, pkt->curr, len);
Executed by:
  • libssl.so.1.1
  • packettest
1620
113}-
114-
115/*-
116 * Initialize |subpkt| with the next |len| bytes read from |pkt|. Data is not-
117 * copied: the |subpkt| packet will share its underlying buffer with the-
118 * original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|.-
119 */-
120__owur static ossl_inline int PACKET_get_sub_packet(PACKET *pkt,-
121 PACKET *subpkt, size_t len)-
122{-
123 if (!PACKET_peek_sub_packet(pkt, subpkt, len))
!PACKET_peek_s..., subpkt, len)Description
TRUEevaluated 3 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
FALSEevaluated 1620 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
3-1620
124 return 0;
executed 3 times by 2 tests: return 0;
Executed by:
  • libssl.so.1.1
  • packettest
3
125-
126 packet_forward(pkt, len);-
127-
128 return 1;
executed 1620 times by 2 tests: return 1;
Executed by:
  • libssl.so.1.1
  • packettest
1620
129}-
130-
131/*-
132 * Peek ahead at 2 bytes in network order from |pkt| and store the value in-
133 * |*data|-
134 */-
135__owur static ossl_inline int PACKET_peek_net_2(const PACKET *pkt,-
136 unsigned int *data)-
137{-
138 if (PACKET_remaining(pkt) < 2)
PACKET_remaining(pkt) < 2Description
TRUEevaluated 1473 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
FALSEevaluated 343455 times by 8 tests
Evaluated by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
1473-343455
139 return 0;
executed 1473 times by 2 tests: return 0;
Executed by:
  • libssl.so.1.1
  • packettest
1473
140-
141 *data = ((unsigned int)(*pkt->curr)) << 8;-
142 *data |= *(pkt->curr + 1);-
143-
144 return 1;
executed 343455 times by 8 tests: return 1;
Executed by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
343455
145}-
146-
147/* Equivalent of n2s */-
148/* Get 2 bytes in network order from |pkt| and store the value in |*data| */-
149__owur static ossl_inline int PACKET_get_net_2(PACKET *pkt, unsigned int *data)-
150{-
151 if (!PACKET_peek_net_2(pkt, data))
!PACKET_peek_net_2(pkt, data)Description
TRUEevaluated 1473 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
FALSEevaluated 343455 times by 8 tests
Evaluated by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
1473-343455
152 return 0;
executed 1473 times by 2 tests: return 0;
Executed by:
  • libssl.so.1.1
  • packettest
1473
153-
154 packet_forward(pkt, 2);-
155-
156 return 1;
executed 343455 times by 8 tests: return 1;
Executed by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
343455
157}-
158-
159/* Same as PACKET_get_net_2() but for a size_t */-
160__owur static ossl_inline int PACKET_get_net_2_len(PACKET *pkt, size_t *data)-
161{-
162 unsigned int i;-
163 int ret = PACKET_get_net_2(pkt, &i);-
164-
165 if (ret)
retDescription
TRUEevaluated 103335 times by 1 test
Evaluated by:
  • libssl.so.1.1
FALSEnever evaluated
0-103335
166 *data = (size_t)i;
executed 103335 times by 1 test: *data = (size_t)i;
Executed by:
  • libssl.so.1.1
103335
167-
168 return ret;
executed 103335 times by 1 test: return ret;
Executed by:
  • libssl.so.1.1
103335
169}-
170-
171/*-
172 * Peek ahead at 3 bytes in network order from |pkt| and store the value in-
173 * |*data|-
174 */-
175__owur static ossl_inline int PACKET_peek_net_3(const PACKET *pkt,-
176 unsigned long *data)-
177{-
178 if (PACKET_remaining(pkt) < 3)
PACKET_remaining(pkt) < 3Description
TRUEevaluated 3 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
FALSEevaluated 7079 times by 3 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
  • tls13ccstest
3-7079
179 return 0;
executed 3 times by 2 tests: return 0;
Executed by:
  • libssl.so.1.1
  • packettest
3
180-
181 *data = ((unsigned long)(*pkt->curr)) << 16;-
182 *data |= ((unsigned long)(*(pkt->curr + 1))) << 8;-
183 *data |= *(pkt->curr + 2);-
184-
185 return 1;
executed 7079 times by 3 tests: return 1;
Executed by:
  • libssl.so.1.1
  • packettest
  • tls13ccstest
7079
186}-
187-
188/* Equivalent of n2l3 */-
189/* Get 3 bytes in network order from |pkt| and store the value in |*data| */-
190__owur static ossl_inline int PACKET_get_net_3(PACKET *pkt, unsigned long *data)-
191{-
192 if (!PACKET_peek_net_3(pkt, data))
!PACKET_peek_net_3(pkt, data)Description
TRUEevaluated 3 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
FALSEevaluated 7079 times by 3 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
  • tls13ccstest
3-7079
193 return 0;
executed 3 times by 2 tests: return 0;
Executed by:
  • libssl.so.1.1
  • packettest
3
194-
195 packet_forward(pkt, 3);-
196-
197 return 1;
executed 7079 times by 3 tests: return 1;
Executed by:
  • libssl.so.1.1
  • packettest
  • tls13ccstest
7079
198}-
199-
200/* Same as PACKET_get_net_3() but for a size_t */-
201__owur static ossl_inline int PACKET_get_net_3_len(PACKET *pkt, size_t *data)-
202{-
203 unsigned long i;-
204 int ret = PACKET_get_net_3(pkt, &i);-
205-
206 if (ret)
retDescription
TRUEevaluated 35 times by 1 test
Evaluated by:
  • libssl.so.1.1
FALSEnever evaluated
0-35
207 *data = (size_t)i;
executed 35 times by 1 test: *data = (size_t)i;
Executed by:
  • libssl.so.1.1
35
208-
209 return ret;
executed 35 times by 1 test: return ret;
Executed by:
  • libssl.so.1.1
35
210}-
211-
212/*-
213 * Peek ahead at 4 bytes in network order from |pkt| and store the value in-
214 * |*data|-
215 */-
216__owur static ossl_inline int PACKET_peek_net_4(const PACKET *pkt,-
217 unsigned long *data)-
218{-
219 if (PACKET_remaining(pkt) < 4)
PACKET_remaining(pkt) < 4Description
TRUEevaluated 3 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
FALSEevaluated 3198 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
3-3198
220 return 0;
executed 3 times by 2 tests: return 0;
Executed by:
  • libssl.so.1.1
  • packettest
3
221-
222 *data = ((unsigned long)(*pkt->curr)) << 24;-
223 *data |= ((unsigned long)(*(pkt->curr + 1))) << 16;-
224 *data |= ((unsigned long)(*(pkt->curr + 2))) << 8;-
225 *data |= *(pkt->curr + 3);-
226-
227 return 1;
executed 3198 times by 2 tests: return 1;
Executed by:
  • libssl.so.1.1
  • packettest
3198
228}-
229-
230/* Equivalent of n2l */-
231/* Get 4 bytes in network order from |pkt| and store the value in |*data| */-
232__owur static ossl_inline int PACKET_get_net_4(PACKET *pkt, unsigned long *data)-
233{-
234 if (!PACKET_peek_net_4(pkt, data))
!PACKET_peek_net_4(pkt, data)Description
TRUEevaluated 3 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
FALSEevaluated 3198 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
3-3198
235 return 0;
executed 3 times by 2 tests: return 0;
Executed by:
  • libssl.so.1.1
  • packettest
3
236-
237 packet_forward(pkt, 4);-
238-
239 return 1;
executed 3198 times by 2 tests: return 1;
Executed by:
  • libssl.so.1.1
  • packettest
3198
240}-
241-
242/* Same as PACKET_get_net_4() but for a size_t */-
243__owur static ossl_inline int PACKET_get_net_4_len(PACKET *pkt, size_t *data)-
244{-
245 unsigned long i;-
246 int ret = PACKET_get_net_4(pkt, &i);-
247-
248 if (ret)
retDescription
TRUEnever evaluated
FALSEnever evaluated
0
249 *data = (size_t)i;
never executed: *data = (size_t)i;
0
250-
251 return ret;
never executed: return ret;
0
252}-
253-
254/* Peek ahead at 1 byte from |pkt| and store the value in |*data| */-
255__owur static ossl_inline int PACKET_peek_1(const PACKET *pkt,-
256 unsigned int *data)-
257{-
258 if (!PACKET_remaining(pkt))
!PACKET_remaining(pkt)Description
TRUEevaluated 863 times by 3 tests
Evaluated by:
  • asynciotest
  • libssl.so.1.1
  • packettest
FALSEevaluated 142462 times by 8 tests
Evaluated by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
863-142462
259 return 0;
executed 863 times by 3 tests: return 0;
Executed by:
  • asynciotest
  • libssl.so.1.1
  • packettest
863
260-
261 *data = *pkt->curr;-
262-
263 return 1;
executed 142462 times by 8 tests: return 1;
Executed by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
142462
264}-
265-
266/* Get 1 byte from |pkt| and store the value in |*data| */-
267__owur static ossl_inline int PACKET_get_1(PACKET *pkt, unsigned int *data)-
268{-
269 if (!PACKET_peek_1(pkt, data))
!PACKET_peek_1(pkt, data)Description
TRUEevaluated 863 times by 3 tests
Evaluated by:
  • asynciotest
  • libssl.so.1.1
  • packettest
FALSEevaluated 142462 times by 8 tests
Evaluated by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
863-142462
270 return 0;
executed 863 times by 3 tests: return 0;
Executed by:
  • asynciotest
  • libssl.so.1.1
  • packettest
863
271-
272 packet_forward(pkt, 1);-
273-
274 return 1;
executed 142462 times by 8 tests: return 1;
Executed by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
142462
275}-
276-
277/* Same as PACKET_get_1() but for a size_t */-
278__owur static ossl_inline int PACKET_get_1_len(PACKET *pkt, size_t *data)-
279{-
280 unsigned int i;-
281 int ret = PACKET_get_1(pkt, &i);-
282-
283 if (ret)
retDescription
TRUEevaluated 2506 times by 1 test
Evaluated by:
  • libssl.so.1.1
FALSEnever evaluated
0-2506
284 *data = (size_t)i;
executed 2506 times by 1 test: *data = (size_t)i;
Executed by:
  • libssl.so.1.1
2506
285-
286 return ret;
executed 2506 times by 1 test: return ret;
Executed by:
  • libssl.so.1.1
2506
287}-
288-
289/*-
290 * Peek ahead at 4 bytes in reverse network order from |pkt| and store the value-
291 * in |*data|-
292 */-
293__owur static ossl_inline int PACKET_peek_4(const PACKET *pkt,-
294 unsigned long *data)-
295{-
296 if (PACKET_remaining(pkt) < 4)
PACKET_remaining(pkt) < 4Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • packettest
FALSEevaluated 2 times by 1 test
Evaluated by:
  • packettest
1-2
297 return 0;
executed 1 time by 1 test: return 0;
Executed by:
  • packettest
1
298-
299 *data = *pkt->curr;-
300 *data |= ((unsigned long)(*(pkt->curr + 1))) << 8;-
301 *data |= ((unsigned long)(*(pkt->curr + 2))) << 16;-
302 *data |= ((unsigned long)(*(pkt->curr + 3))) << 24;-
303-
304 return 1;
executed 2 times by 1 test: return 1;
Executed by:
  • packettest
2
305}-
306-
307/* Equivalent of c2l */-
308/*-
309 * Get 4 bytes in reverse network order from |pkt| and store the value in-
310 * |*data|-
311 */-
312__owur static ossl_inline int PACKET_get_4(PACKET *pkt, unsigned long *data)-
313{-
314 if (!PACKET_peek_4(pkt, data))
!PACKET_peek_4(pkt, data)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • packettest
FALSEevaluated 2 times by 1 test
Evaluated by:
  • packettest
1-2
315 return 0;
executed 1 time by 1 test: return 0;
Executed by:
  • packettest
1
316-
317 packet_forward(pkt, 4);-
318-
319 return 1;
executed 2 times by 1 test: return 1;
Executed by:
  • packettest
2
320}-
321-
322/*-
323 * Peek ahead at |len| bytes from the |pkt| and store a pointer to them in-
324 * |*data|. This just points at the underlying buffer that |pkt| is using. The-
325 * caller should not free this data directly (it will be freed when the-
326 * underlying buffer gets freed-
327 */-
328__owur static ossl_inline int PACKET_peek_bytes(const PACKET *pkt,-
329 const unsigned char **data,-
330 size_t len)-
331{-
332 if (PACKET_remaining(pkt) < len)
PACKET_remaining(pkt) < lenDescription
TRUEevaluated 154 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
FALSEevaluated 99507 times by 8 tests
Evaluated by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
154-99507
333 return 0;
executed 154 times by 2 tests: return 0;
Executed by:
  • libssl.so.1.1
  • packettest
154
334-
335 *data = pkt->curr;-
336-
337 return 1;
executed 99507 times by 8 tests: return 1;
Executed by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
99507
338}-
339-
340/*-
341 * Read |len| bytes from the |pkt| and store a pointer to them in |*data|. This-
342 * just points at the underlying buffer that |pkt| is using. The caller should-
343 * not free this data directly (it will be freed when the underlying buffer gets-
344 * freed-
345 */-
346__owur static ossl_inline int PACKET_get_bytes(PACKET *pkt,-
347 const unsigned char **data,-
348 size_t len)-
349{-
350 if (!PACKET_peek_bytes(pkt, data, len))
!PACKET_peek_b...kt, data, len)Description
TRUEevaluated 154 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
FALSEevaluated 99507 times by 8 tests
Evaluated by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
154-99507
351 return 0;
executed 154 times by 2 tests: return 0;
Executed by:
  • libssl.so.1.1
  • packettest
154
352-
353 packet_forward(pkt, len);-
354-
355 return 1;
executed 99507 times by 8 tests: return 1;
Executed by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
99507
356}-
357-
358/* Peek ahead at |len| bytes from |pkt| and copy them to |data| */-
359__owur static ossl_inline int PACKET_peek_copy_bytes(const PACKET *pkt,-
360 unsigned char *data,-
361 size_t len)-
362{-
363 if (PACKET_remaining(pkt) < len)
PACKET_remaining(pkt) < lenDescription
TRUEevaluated 3137 times by 1 test
Evaluated by:
  • libssl.so.1.1
FALSEevaluated 87500 times by 4 tests
Evaluated by:
  • bad_dtls_test
  • libssl.so.1.1
  • packettest
  • tls13ccstest
3137-87500
364 return 0;
executed 3137 times by 1 test: return 0;
Executed by:
  • libssl.so.1.1
3137
365-
366 memcpy(data, pkt->curr, len);-
367-
368 return 1;
executed 87500 times by 4 tests: return 1;
Executed by:
  • bad_dtls_test
  • libssl.so.1.1
  • packettest
  • tls13ccstest
87500
369}-
370-
371/*-
372 * Read |len| bytes from |pkt| and copy them to |data|.-
373 * The caller is responsible for ensuring that |data| can hold |len| bytes.-
374 */-
375__owur static ossl_inline int PACKET_copy_bytes(PACKET *pkt,-
376 unsigned char *data, size_t len)-
377{-
378 if (!PACKET_peek_copy_bytes(pkt, data, len))
!PACKET_peek_c...kt, data, len)Description
TRUEevaluated 3137 times by 1 test
Evaluated by:
  • libssl.so.1.1
FALSEevaluated 87500 times by 4 tests
Evaluated by:
  • bad_dtls_test
  • libssl.so.1.1
  • packettest
  • tls13ccstest
3137-87500
379 return 0;
executed 3137 times by 1 test: return 0;
Executed by:
  • libssl.so.1.1
3137
380-
381 packet_forward(pkt, len);-
382-
383 return 1;
executed 87500 times by 4 tests: return 1;
Executed by:
  • bad_dtls_test
  • libssl.so.1.1
  • packettest
  • tls13ccstest
87500
384}-
385-
386/*-
387 * Copy packet data to |dest|, and set |len| to the number of copied bytes.-
388 * If the packet has more than |dest_len| bytes, nothing is copied.-
389 * Returns 1 if the packet data fits in |dest_len| bytes, 0 otherwise.-
390 * Does not forward PACKET position (because it is typically the last thing-
391 * done with a given PACKET).-
392 */-
393__owur static ossl_inline int PACKET_copy_all(const PACKET *pkt,-
394 unsigned char *dest,-
395 size_t dest_len, size_t *len)-
396{-
397 if (PACKET_remaining(pkt) > dest_len) {
PACKET_remaini...kt) > dest_lenDescription
TRUEevaluated 2 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
FALSEevaluated 7406 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
2-7406
398 *len = 0;-
399 return 0;
executed 2 times by 2 tests: return 0;
Executed by:
  • libssl.so.1.1
  • packettest
2
400 }-
401 *len = pkt->remaining;-
402 memcpy(dest, pkt->curr, pkt->remaining);-
403 return 1;
executed 7406 times by 2 tests: return 1;
Executed by:
  • libssl.so.1.1
  • packettest
7406
404}-
405-
406/*-
407 * Copy |pkt| bytes to a newly allocated buffer and store a pointer to the-
408 * result in |*data|, and the length in |len|.-
409 * If |*data| is not NULL, the old data is OPENSSL_free'd.-
410 * If the packet is empty, or malloc fails, |*data| will be set to NULL.-
411 * Returns 1 if the malloc succeeds and 0 otherwise.-
412 * Does not forward PACKET position (because it is typically the last thing-
413 * done with a given PACKET).-
414 */-
415__owur static ossl_inline int PACKET_memdup(const PACKET *pkt,-
416 unsigned char **data, size_t *len)-
417{-
418 size_t length;-
419-
420 OPENSSL_free(*data);-
421 *data = NULL;-
422 *len = 0;-
423-
424 length = PACKET_remaining(pkt);-
425-
426 if (length == 0)
length == 0Description
TRUEevaluated 42 times by 1 test
Evaluated by:
  • libssl.so.1.1
FALSEevaluated 4703 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
42-4703
427 return 1;
executed 42 times by 1 test: return 1;
Executed by:
  • libssl.so.1.1
42
428-
429 *data = OPENSSL_memdup(pkt->curr, length);-
430 if (*data == NULL)
*data == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 4703 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
0-4703
431 return 0;
never executed: return 0;
0
432-
433 *len = length;-
434 return 1;
executed 4703 times by 2 tests: return 1;
Executed by:
  • libssl.so.1.1
  • packettest
4703
435}-
436-
437/*-
438 * Read a C string from |pkt| and copy to a newly allocated, NUL-terminated-
439 * buffer. Store a pointer to the result in |*data|.-
440 * If |*data| is not NULL, the old data is OPENSSL_free'd.-
441 * If the data in |pkt| does not contain a NUL-byte, the entire data is-
442 * copied and NUL-terminated.-
443 * Returns 1 if the malloc succeeds and 0 otherwise.-
444 * Does not forward PACKET position (because it is typically the last thing done-
445 * with a given PACKET).-
446 */-
447__owur static ossl_inline int PACKET_strndup(const PACKET *pkt, char **data)-
448{-
449 OPENSSL_free(*data);-
450-
451 /* This will succeed on an empty packet, unless pkt->curr == NULL. */-
452 *data = OPENSSL_strndup((const char *)pkt->curr, PACKET_remaining(pkt));-
453 return (*data != NULL);
executed 647 times by 3 tests: return (*data != ((void *)0) );
Executed by:
  • libssl.so.1.1
  • packettest
  • servername_test
647
454}-
455-
456/* Returns 1 if |pkt| contains at least one 0-byte, 0 otherwise. */-
457static ossl_inline int PACKET_contains_zero_byte(const PACKET *pkt)-
458{-
459 return memchr(pkt->curr, 0, pkt->remaining) != NULL;
executed 610 times by 3 tests: return memchr(pkt->curr, 0, pkt->remaining) != ((void *)0) ;
Executed by:
  • libssl.so.1.1
  • packettest
  • servername_test
610
460}-
461-
462/* Move the current reading position forward |len| bytes */-
463__owur static ossl_inline int PACKET_forward(PACKET *pkt, size_t len)-
464{-
465 if (PACKET_remaining(pkt) < len)
PACKET_remaining(pkt) < lenDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • packettest
FALSEevaluated 1292 times by 8 tests
Evaluated by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
1-1292
466 return 0;
executed 1 time by 1 test: return 0;
Executed by:
  • packettest
1
467-
468 packet_forward(pkt, len);-
469-
470 return 1;
executed 1292 times by 8 tests: return 1;
Executed by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
1292
471}-
472-
473/*-
474 * Reads a variable-length vector prefixed with a one-byte length, and stores-
475 * the contents in |subpkt|. |pkt| can equal |subpkt|.-
476 * Data is not copied: the |subpkt| packet will share its underlying buffer with-
477 * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|.-
478 * Upon failure, the original |pkt| and |subpkt| are not modified.-
479 */-
480__owur static ossl_inline int PACKET_get_length_prefixed_1(PACKET *pkt,-
481 PACKET *subpkt)-
482{-
483 unsigned int length;-
484 const unsigned char *data;-
485 PACKET tmp = *pkt;-
486 if (!PACKET_get_1(&tmp, &length) ||
!PACKET_get_1(&tmp, &length)Description
TRUEevaluated 9 times by 1 test
Evaluated by:
  • libssl.so.1.1
FALSEevaluated 14579 times by 8 tests
Evaluated by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
9-14579
487 !PACKET_get_bytes(&tmp, &data, (size_t)length)) {
!PACKET_get_by...size_t)length)Description
TRUEevaluated 16 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
FALSEevaluated 14563 times by 8 tests
Evaluated by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
16-14563
488 return 0;
executed 25 times by 2 tests: return 0;
Executed by:
  • libssl.so.1.1
  • packettest
25
489 }-
490-
491 *pkt = tmp;-
492 subpkt->curr = data;-
493 subpkt->remaining = length;-
494-
495 return 1;
executed 14563 times by 8 tests: return 1;
Executed by:
  • asynciotest
  • bad_dtls_test
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
14563
496}-
497-
498/*-
499 * Like PACKET_get_length_prefixed_1, but additionally, fails when there are-
500 * leftover bytes in |pkt|.-
501 */-
502__owur static ossl_inline int PACKET_as_length_prefixed_1(PACKET *pkt,-
503 PACKET *subpkt)-
504{-
505 unsigned int length;-
506 const unsigned char *data;-
507 PACKET tmp = *pkt;-
508 if (!PACKET_get_1(&tmp, &length) ||
!PACKET_get_1(&tmp, &length)Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • libssl.so.1.1
FALSEevaluated 4710 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
6-4710
509 !PACKET_get_bytes(&tmp, &data, (size_t)length) ||
!PACKET_get_by...size_t)length)Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • libssl.so.1.1
FALSEevaluated 4705 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
5-4705
510 PACKET_remaining(&tmp) != 0) {
PACKET_remaining(&tmp) != 0Description
TRUEevaluated 4 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
FALSEevaluated 4701 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
4-4701
511 return 0;
executed 15 times by 2 tests: return 0;
Executed by:
  • libssl.so.1.1
  • packettest
15
512 }-
513-
514 *pkt = tmp;-
515 subpkt->curr = data;-
516 subpkt->remaining = length;-
517-
518 return 1;
executed 4701 times by 2 tests: return 1;
Executed by:
  • libssl.so.1.1
  • packettest
4701
519}-
520-
521/*-
522 * Reads a variable-length vector prefixed with a two-byte length, and stores-
523 * the contents in |subpkt|. |pkt| can equal |subpkt|.-
524 * Data is not copied: the |subpkt| packet will share its underlying buffer with-
525 * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|.-
526 * Upon failure, the original |pkt| and |subpkt| are not modified.-
527 */-
528__owur static ossl_inline int PACKET_get_length_prefixed_2(PACKET *pkt,-
529 PACKET *subpkt)-
530{-
531 unsigned int length;-
532 const unsigned char *data;-
533 PACKET tmp = *pkt;-
534-
535 if (!PACKET_get_net_2(&tmp, &length) ||
!PACKET_get_ne...&tmp, &length)Description
TRUEevaluated 23 times by 1 test
Evaluated by:
  • libssl.so.1.1
FALSEevaluated 50631 times by 7 tests
Evaluated by:
  • asynciotest
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
23-50631
536 !PACKET_get_bytes(&tmp, &data, (size_t)length)) {
!PACKET_get_by...size_t)length)Description
TRUEevaluated 82 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
FALSEevaluated 50549 times by 7 tests
Evaluated by:
  • asynciotest
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
82-50549
537 return 0;
executed 105 times by 2 tests: return 0;
Executed by:
  • libssl.so.1.1
  • packettest
105
538 }-
539-
540 *pkt = tmp;-
541 subpkt->curr = data;-
542 subpkt->remaining = length;-
543-
544 return 1;
executed 50549 times by 7 tests: return 1;
Executed by:
  • asynciotest
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
  • tls13ccstest
50549
545}-
546-
547/*-
548 * Like PACKET_get_length_prefixed_2, but additionally, fails when there are-
549 * leftover bytes in |pkt|.-
550 */-
551__owur static ossl_inline int PACKET_as_length_prefixed_2(PACKET *pkt,-
552 PACKET *subpkt)-
553{-
554 unsigned int length;-
555 const unsigned char *data;-
556 PACKET tmp = *pkt;-
557-
558 if (!PACKET_get_net_2(&tmp, &length) ||
!PACKET_get_ne...&tmp, &length)Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • libssl.so.1.1
FALSEevaluated 14275 times by 5 tests
Evaluated by:
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
13-14275
559 !PACKET_get_bytes(&tmp, &data, (size_t)length) ||
!PACKET_get_by...size_t)length)Description
TRUEevaluated 30 times by 1 test
Evaluated by:
  • libssl.so.1.1
FALSEevaluated 14245 times by 5 tests
Evaluated by:
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
30-14245
560 PACKET_remaining(&tmp) != 0) {
PACKET_remaining(&tmp) != 0Description
TRUEevaluated 9 times by 2 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
FALSEevaluated 14236 times by 5 tests
Evaluated by:
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
9-14236
561 return 0;
executed 52 times by 2 tests: return 0;
Executed by:
  • libssl.so.1.1
  • packettest
52
562 }-
563-
564 *pkt = tmp;-
565 subpkt->curr = data;-
566 subpkt->remaining = length;-
567-
568 return 1;
executed 14236 times by 5 tests: return 1;
Executed by:
  • clienthellotest
  • libssl.so.1.1
  • packettest
  • servername_test
  • sslapitest
14236
569}-
570-
571/*-
572 * Reads a variable-length vector prefixed with a three-byte length, and stores-
573 * the contents in |subpkt|. |pkt| can equal |subpkt|.-
574 * Data is not copied: the |subpkt| packet will share its underlying buffer with-
575 * the original |pkt|, so data wrapped by |pkt| must outlive the |subpkt|.-
576 * Upon failure, the original |pkt| and |subpkt| are not modified.-
577 */-
578__owur static ossl_inline int PACKET_get_length_prefixed_3(PACKET *pkt,-
579 PACKET *subpkt)-
580{-
581 unsigned long length;-
582 const unsigned char *data;-
583 PACKET tmp = *pkt;-
584 if (!PACKET_get_net_3(&tmp, &length) ||
!PACKET_get_ne...&tmp, &length)Description
TRUEnever evaluated
FALSEevaluated 137 times by 3 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
  • tls13ccstest
0-137
585 !PACKET_get_bytes(&tmp, &data, (size_t)length)) {
!PACKET_get_by...size_t)length)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • packettest
FALSEevaluated 136 times by 3 tests
Evaluated by:
  • libssl.so.1.1
  • packettest
  • tls13ccstest
1-136
586 return 0;
executed 1 time by 1 test: return 0;
Executed by:
  • packettest
1
587 }-
588-
589 *pkt = tmp;-
590 subpkt->curr = data;-
591 subpkt->remaining = length;-
592-
593 return 1;
executed 136 times by 3 tests: return 1;
Executed by:
  • libssl.so.1.1
  • packettest
  • tls13ccstest
136
594}-
595-
596/* Writeable packets */-
597-
598typedef struct wpacket_sub WPACKET_SUB;-
599struct wpacket_sub {-
600 /* The parent WPACKET_SUB if we have one or NULL otherwise */-
601 WPACKET_SUB *parent;-
602-
603 /*-
604 * Offset into the buffer where the length of this WPACKET goes. We use an-
605 * offset in case the buffer grows and gets reallocated.-
606 */-
607 size_t packet_len;-
608-
609 /* Number of bytes in the packet_len or 0 if we don't write the length */-
610 size_t lenbytes;-
611-
612 /* Number of bytes written to the buf prior to this packet starting */-
613 size_t pwritten;-
614-
615 /* Flags for this sub-packet */-
616 unsigned int flags;-
617};-
618-
619typedef struct wpacket_st WPACKET;-
620struct wpacket_st {-
621 /* The buffer where we store the output data */-
622 BUF_MEM *buf;-
623-
624 /* Fixed sized buffer which can be used as an alternative to buf */-
625 unsigned char *staticbuf;-
626-
627 /*-
628 * Offset into the buffer where we are currently writing. We use an offset-
629 * in case the buffer grows and gets reallocated.-
630 */-
631 size_t curr;-
632-
633 /* Number of bytes written so far */-
634 size_t written;-
635-
636 /* Maximum number of bytes we will allow to be written to this WPACKET */-
637 size_t maxsize;-
638-
639 /* Our sub-packets (always at least one if not finished) */-
640 WPACKET_SUB *subs;-
641};-
642-
643/* Flags */-
644-
645/* Default */-
646#define WPACKET_FLAGS_NONE 0-
647-
648/* Error on WPACKET_close() if no data written to the WPACKET */-
649#define WPACKET_FLAGS_NON_ZERO_LENGTH 1-
650-
651/*-
652 * Abandon all changes on WPACKET_close() if no data written to the WPACKET,-
653 * i.e. this does not write out a zero packet length-
654 */-
655#define WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH 2-
656-
657-
658/*-
659 * Initialise a WPACKET with the buffer in |buf|. The buffer must exist-
660 * for the whole time that the WPACKET is being used. Additionally |lenbytes| of-
661 * data is preallocated at the start of the buffer to store the length of the-
662 * WPACKET once we know it.-
663 */-
664int WPACKET_init_len(WPACKET *pkt, BUF_MEM *buf, size_t lenbytes);-
665-
666/*-
667 * Same as WPACKET_init_len except there is no preallocation of the WPACKET-
668 * length.-
669 */-
670int WPACKET_init(WPACKET *pkt, BUF_MEM *buf);-
671-
672/*-
673 * Same as WPACKET_init_len except we do not use a growable BUF_MEM structure.-
674 * A fixed buffer of memory |buf| of size |len| is used instead. A failure will-
675 * occur if you attempt to write beyond the end of the buffer-
676 */-
677int WPACKET_init_static_len(WPACKET *pkt, unsigned char *buf, size_t len,-
678 size_t lenbytes);-
679/*-
680 * Set the flags to be applied to the current sub-packet-
681 */-
682int WPACKET_set_flags(WPACKET *pkt, unsigned int flags);-
683-
684/*-
685 * Closes the most recent sub-packet. It also writes out the length of the-
686 * packet to the required location (normally the start of the WPACKET) if-
687 * appropriate. The top level WPACKET should be closed using WPACKET_finish()-
688 * instead of this function.-
689 */-
690int WPACKET_close(WPACKET *pkt);-
691-
692/*-
693 * The same as WPACKET_close() but only for the top most WPACKET. Additionally-
694 * frees memory resources for this WPACKET.-
695 */-
696int WPACKET_finish(WPACKET *pkt);-
697-
698/*-
699 * Iterate through all the sub-packets and write out their lengths as if they-
700 * were being closed. The lengths will be overwritten with the final lengths-
701 * when the sub-packets are eventually closed (which may be different if more-
702 * data is added to the WPACKET). This function fails if a sub-packet is of 0-
703 * length and WPACKET_FLAGS_ABANDON_ON_ZERO_LENGTH is set.-
704 */-
705int WPACKET_fill_lengths(WPACKET *pkt);-
706-
707/*-
708 * Initialise a new sub-packet. Additionally |lenbytes| of data is preallocated-
709 * at the start of the sub-packet to store its length once we know it. Don't-
710 * call this directly. Use the convenience macros below instead.-
711 */-
712int WPACKET_start_sub_packet_len__(WPACKET *pkt, size_t lenbytes);-
713-
714/*-
715 * Convenience macros for calling WPACKET_start_sub_packet_len with different-
716 * lengths-
717 */-
718#define WPACKET_start_sub_packet_u8(pkt) \-
719 WPACKET_start_sub_packet_len__((pkt), 1)-
720#define WPACKET_start_sub_packet_u16(pkt) \-
721 WPACKET_start_sub_packet_len__((pkt), 2)-
722#define WPACKET_start_sub_packet_u24(pkt) \-
723 WPACKET_start_sub_packet_len__((pkt), 3)-
724#define WPACKET_start_sub_packet_u32(pkt) \-
725 WPACKET_start_sub_packet_len__((pkt), 4)-
726-
727/*-
728 * Same as WPACKET_start_sub_packet_len__() except no bytes are pre-allocated-
729 * for the sub-packet length.-
730 */-
731int WPACKET_start_sub_packet(WPACKET *pkt);-
732-
733/*-
734 * Allocate bytes in the WPACKET for the output. This reserves the bytes-
735 * and counts them as "written", but doesn't actually do the writing. A pointer-
736 * to the allocated bytes is stored in |*allocbytes|. |allocbytes| may be NULL.-
737 * WARNING: the allocated bytes must be filled in immediately, without further-
738 * WPACKET_* calls. If not then the underlying buffer may be realloc'd and-
739 * change its location.-
740 */-
741int WPACKET_allocate_bytes(WPACKET *pkt, size_t len,-
742 unsigned char **allocbytes);-
743-
744/*-
745 * The same as WPACKET_allocate_bytes() except additionally a new sub-packet is-
746 * started for the allocated bytes, and then closed immediately afterwards. The-
747 * number of length bytes for the sub-packet is in |lenbytes|. Don't call this-
748 * directly. Use the convenience macros below instead.-
749 */-
750int WPACKET_sub_allocate_bytes__(WPACKET *pkt, size_t len,-
751 unsigned char **allocbytes, size_t lenbytes);-
752-
753/*-
754 * Convenience macros for calling WPACKET_sub_allocate_bytes with different-
755 * lengths-
756 */-
757#define WPACKET_sub_allocate_bytes_u8(pkt, len, bytes) \-
758 WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 1)-
759#define WPACKET_sub_allocate_bytes_u16(pkt, len, bytes) \-
760 WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 2)-
761#define WPACKET_sub_allocate_bytes_u24(pkt, len, bytes) \-
762 WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 3)-
763#define WPACKET_sub_allocate_bytes_u32(pkt, len, bytes) \-
764 WPACKET_sub_allocate_bytes__((pkt), (len), (bytes), 4)-
765-
766/*-
767 * The same as WPACKET_allocate_bytes() except the reserved bytes are not-
768 * actually counted as written. Typically this will be for when we don't know-
769 * how big arbitrary data is going to be up front, but we do know what the-
770 * maximum size will be. If this function is used, then it should be immediately-
771 * followed by a WPACKET_allocate_bytes() call before any other WPACKET-
772 * functions are called (unless the write to the allocated bytes is abandoned).-
773 *-
774 * For example: If we are generating a signature, then the size of that-
775 * signature may not be known in advance. We can use WPACKET_reserve_bytes() to-
776 * handle this:-
777 *-
778 * if (!WPACKET_sub_reserve_bytes_u16(&pkt, EVP_PKEY_size(pkey), &sigbytes1)-
779 * || EVP_SignFinal(md_ctx, sigbytes1, &siglen, pkey) <= 0-
780 * || !WPACKET_sub_allocate_bytes_u16(&pkt, siglen, &sigbytes2)-
781 * || sigbytes1 != sigbytes2)-
782 * goto err;-
783 */-
784int WPACKET_reserve_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes);-
785-
786/*-
787 * The "reserve_bytes" equivalent of WPACKET_sub_allocate_bytes__()-
788 */-
789int WPACKET_sub_reserve_bytes__(WPACKET *pkt, size_t len,-
790 unsigned char **allocbytes, size_t lenbytes);-
791-
792/*-
793 * Convenience macros for WPACKET_sub_reserve_bytes with different lengths-
794 */-
795#define WPACKET_sub_reserve_bytes_u8(pkt, len, bytes) \-
796 WPACKET_reserve_bytes__((pkt), (len), (bytes), 1)-
797#define WPACKET_sub_reserve_bytes_u16(pkt, len, bytes) \-
798 WPACKET_sub_reserve_bytes__((pkt), (len), (bytes), 2)-
799#define WPACKET_sub_reserve_bytes_u24(pkt, len, bytes) \-
800 WPACKET_sub_reserve_bytes__((pkt), (len), (bytes), 3)-
801#define WPACKET_sub_reserve_bytes_u32(pkt, len, bytes) \-
802 WPACKET_sub_reserve_bytes__((pkt), (len), (bytes), 4)-
803-
804/*-
805 * Write the value stored in |val| into the WPACKET. The value will consume-
806 * |bytes| amount of storage. An error will occur if |val| cannot be-
807 * accommodated in |bytes| storage, e.g. attempting to write the value 256 into-
808 * 1 byte will fail. Don't call this directly. Use the convenience macros below-
809 * instead.-
810 */-
811int WPACKET_put_bytes__(WPACKET *pkt, unsigned int val, size_t bytes);-
812-
813/*-
814 * Convenience macros for calling WPACKET_put_bytes with different-
815 * lengths-
816 */-
817#define WPACKET_put_bytes_u8(pkt, val) \-
818 WPACKET_put_bytes__((pkt), (val), 1)-
819#define WPACKET_put_bytes_u16(pkt, val) \-
820 WPACKET_put_bytes__((pkt), (val), 2)-
821#define WPACKET_put_bytes_u24(pkt, val) \-
822 WPACKET_put_bytes__((pkt), (val), 3)-
823#define WPACKET_put_bytes_u32(pkt, val) \-
824 WPACKET_put_bytes__((pkt), (val), 4)-
825-
826/* Set a maximum size that we will not allow the WPACKET to grow beyond */-
827int WPACKET_set_max_size(WPACKET *pkt, size_t maxsize);-
828-
829/* Copy |len| bytes of data from |*src| into the WPACKET. */-
830int WPACKET_memcpy(WPACKET *pkt, const void *src, size_t len);-
831-
832/* Set |len| bytes of data to |ch| into the WPACKET. */-
833int WPACKET_memset(WPACKET *pkt, int ch, size_t len);-
834-
835/*-
836 * Copy |len| bytes of data from |*src| into the WPACKET and prefix with its-
837 * length (consuming |lenbytes| of data for the length). Don't call this-
838 * directly. Use the convenience macros below instead.-
839 */-
840int WPACKET_sub_memcpy__(WPACKET *pkt, const void *src, size_t len,-
841 size_t lenbytes);-
842-
843/* Convenience macros for calling WPACKET_sub_memcpy with different lengths */-
844#define WPACKET_sub_memcpy_u8(pkt, src, len) \-
845 WPACKET_sub_memcpy__((pkt), (src), (len), 1)-
846#define WPACKET_sub_memcpy_u16(pkt, src, len) \-
847 WPACKET_sub_memcpy__((pkt), (src), (len), 2)-
848#define WPACKET_sub_memcpy_u24(pkt, src, len) \-
849 WPACKET_sub_memcpy__((pkt), (src), (len), 3)-
850#define WPACKET_sub_memcpy_u32(pkt, src, len) \-
851 WPACKET_sub_memcpy__((pkt), (src), (len), 4)-
852-
853/*-
854 * Return the total number of bytes written so far to the underlying buffer-
855 * including any storage allocated for length bytes-
856 */-
857int WPACKET_get_total_written(WPACKET *pkt, size_t *written);-
858-
859/*-
860 * Returns the length of the current sub-packet. This excludes any bytes-
861 * allocated for the length itself.-
862 */-
863int WPACKET_get_length(WPACKET *pkt, size_t *len);-
864-
865/*-
866 * Returns a pointer to the current write location, but does not allocate any-
867 * bytes.-
868 */-
869unsigned char *WPACKET_get_curr(WPACKET *pkt);-
870-
871/* Release resources in a WPACKET if a failure has occurred. */-
872void WPACKET_cleanup(WPACKET *pkt);-
873-
874#endif /* HEADER_PACKET_LOCL_H */-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2