diff options
Diffstat (limited to 'bufaux.c')
-rw-r--r-- | bufaux.c | 28 |
1 files changed, 22 insertions, 6 deletions
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: bufaux.c,v 1.46 2008/06/10 23:21:34 dtucker Exp $ */ | 1 | /* $OpenBSD: bufaux.c,v 1.48 2010/02/02 22:49:34 djm Exp $ */ |
2 | /* | 2 | /* |
3 | * Author: Tatu Ylonen <ylo@cs.hut.fi> | 3 | * Author: Tatu Ylonen <ylo@cs.hut.fi> |
4 | * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland | 4 | * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland |
@@ -166,7 +166,10 @@ buffer_get_string_ret(Buffer *buffer, u_int *length_ptr) | |||
166 | u_int len; | 166 | u_int len; |
167 | 167 | ||
168 | /* Get the length. */ | 168 | /* Get the length. */ |
169 | len = buffer_get_int(buffer); | 169 | if (buffer_get_int_ret(&len, buffer) != 0) { |
170 | error("buffer_get_string_ret: cannot extract length"); | ||
171 | return (NULL); | ||
172 | } | ||
170 | if (len > 256 * 1024) { | 173 | if (len > 256 * 1024) { |
171 | error("buffer_get_string_ret: bad string length %u", len); | 174 | error("buffer_get_string_ret: bad string length %u", len); |
172 | return (NULL); | 175 | return (NULL); |
@@ -198,14 +201,17 @@ buffer_get_string(Buffer *buffer, u_int *length_ptr) | |||
198 | } | 201 | } |
199 | 202 | ||
200 | void * | 203 | void * |
201 | buffer_get_string_ptr(Buffer *buffer, u_int *length_ptr) | 204 | buffer_get_string_ptr_ret(Buffer *buffer, u_int *length_ptr) |
202 | { | 205 | { |
203 | void *ptr; | 206 | void *ptr; |
204 | u_int len; | 207 | u_int len; |
205 | 208 | ||
206 | len = buffer_get_int(buffer); | 209 | if (buffer_get_int_ret(&len, buffer) != 0) |
207 | if (len > 256 * 1024) | 210 | return NULL; |
208 | fatal("buffer_get_string_ptr: bad string length %u", len); | 211 | if (len > 256 * 1024) { |
212 | error("buffer_get_string_ptr: bad string length %u", len); | ||
213 | return NULL; | ||
214 | } | ||
209 | ptr = buffer_ptr(buffer); | 215 | ptr = buffer_ptr(buffer); |
210 | buffer_consume(buffer, len); | 216 | buffer_consume(buffer, len); |
211 | if (length_ptr) | 217 | if (length_ptr) |
@@ -213,6 +219,16 @@ buffer_get_string_ptr(Buffer *buffer, u_int *length_ptr) | |||
213 | return (ptr); | 219 | return (ptr); |
214 | } | 220 | } |
215 | 221 | ||
222 | void * | ||
223 | buffer_get_string_ptr(Buffer *buffer, u_int *length_ptr) | ||
224 | { | ||
225 | void *ret; | ||
226 | |||
227 | if ((ret = buffer_get_string_ptr_ret(buffer, length_ptr)) == NULL) | ||
228 | fatal("buffer_get_string_ptr: buffer error"); | ||
229 | return (ret); | ||
230 | } | ||
231 | |||
216 | /* | 232 | /* |
217 | * Stores and arbitrary binary string in the buffer. | 233 | * Stores and arbitrary binary string in the buffer. |
218 | */ | 234 | */ |