diff options
Diffstat (limited to 'src/lib/libssl/tls_content.c')
-rw-r--r-- | src/lib/libssl/tls_content.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/src/lib/libssl/tls_content.c b/src/lib/libssl/tls_content.c index ede178f84c..726de0fdc4 100644 --- a/src/lib/libssl/tls_content.c +++ b/src/lib/libssl/tls_content.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls_content.c,v 1.1 2021/09/04 16:26:12 jsing Exp $ */ | 1 | /* $OpenBSD: tls_content.c,v 1.2 2022/11/11 17:15:27 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2020 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2020 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -26,7 +26,7 @@ struct tls_content { | |||
26 | uint16_t epoch; | 26 | uint16_t epoch; |
27 | 27 | ||
28 | const uint8_t *data; | 28 | const uint8_t *data; |
29 | size_t len; | 29 | size_t data_len; |
30 | CBS cbs; | 30 | CBS cbs; |
31 | }; | 31 | }; |
32 | 32 | ||
@@ -39,7 +39,7 @@ tls_content_new(void) | |||
39 | void | 39 | void |
40 | tls_content_clear(struct tls_content *content) | 40 | tls_content_clear(struct tls_content *content) |
41 | { | 41 | { |
42 | freezero((void *)content->data, content->len); | 42 | freezero((void *)content->data, content->data_len); |
43 | memset(content, 0, sizeof(*content)); | 43 | memset(content, 0, sizeof(*content)); |
44 | } | 44 | } |
45 | 45 | ||
@@ -113,9 +113,24 @@ tls_content_set_data(struct tls_content *content, uint8_t type, | |||
113 | 113 | ||
114 | content->type = type; | 114 | content->type = type; |
115 | content->data = data; | 115 | content->data = data; |
116 | content->len = data_len; | 116 | content->data_len = data_len; |
117 | 117 | ||
118 | CBS_init(&content->cbs, content->data, content->len); | 118 | CBS_init(&content->cbs, content->data, content->data_len); |
119 | } | ||
120 | |||
121 | int | ||
122 | tls_content_set_bounds(struct tls_content *content, size_t offset, size_t len) | ||
123 | { | ||
124 | size_t content_len; | ||
125 | |||
126 | content_len = offset + len; | ||
127 | if (content_len < len) | ||
128 | return 0; | ||
129 | if (content_len > content->data_len) | ||
130 | return 0; | ||
131 | |||
132 | CBS_init(&content->cbs, content->data, content_len); | ||
133 | return CBS_skip(&content->cbs, offset); | ||
119 | } | 134 | } |
120 | 135 | ||
121 | static ssize_t | 136 | static ssize_t |