From: Matt Caswell Date: Fri, 18 Nov 2016 16:34:01 +0000 (+0000) Subject: Add an ability to find out the current write location from a WPACKET X-Git-Tag: OpenSSL_1_1_1-pre1~2936 X-Git-Url: https://git.openssl.org/?p=openssl.git;a=commitdiff_plain;h=3171bad66e461052e584e1628693db67b990e94e Add an ability to find out the current write location from a WPACKET Reviewed-by: Rich Salz --- diff --git a/ssl/packet.c b/ssl/packet.c index 5c5513314b..f7b5efa400 100644 --- a/ssl/packet.c +++ b/ssl/packet.c @@ -62,7 +62,8 @@ int WPACKET_reserve_bytes(WPACKET *pkt, size_t len, unsigned char **allocbytes) if (BUF_MEM_grow(pkt->buf, newlen) == 0) return 0; } - *allocbytes = GETBUF(pkt) + pkt->curr; + if (allocbytes != NULL) + *allocbytes = GETBUF(pkt) + pkt->curr; return 1; } @@ -376,6 +377,11 @@ int WPACKET_get_length(WPACKET *pkt, size_t *len) return 1; } +unsigned char *WPACKET_get_curr(WPACKET *pkt) +{ + return GETBUF(pkt) + pkt->curr; +} + void WPACKET_cleanup(WPACKET *pkt) { WPACKET_SUB *sub, *parent; diff --git a/ssl/packet_locl.h b/ssl/packet_locl.h index 4658734bd8..61233d9b6a 100644 --- a/ssl/packet_locl.h +++ b/ssl/packet_locl.h @@ -728,7 +728,7 @@ int WPACKET_start_sub_packet(WPACKET *pkt); /* * Allocate bytes in the WPACKET for the output. This reserves the bytes * and counts them as "written", but doesn't actually do the writing. A pointer - * to the allocated bytes is stored in |*allocbytes|. + * to the allocated bytes is stored in |*allocbytes|. |allocbytes| may be NULL. * WARNING: the allocated bytes must be filled in immediately, without further * WPACKET_* calls. If not then the underlying buffer may be realloc'd and * change its location. @@ -854,6 +854,12 @@ int WPACKET_get_total_written(WPACKET *pkt, size_t *written); */ int WPACKET_get_length(WPACKET *pkt, size_t *len); +/* + * Returns a pointer to the current write location, but does not allocate any + * bytes. + */ +unsigned char *WPACKET_get_curr(WPACKET *pkt); + /* Release resources in a WPACKET if a failure has occurred. */ void WPACKET_cleanup(WPACKET *pkt);