Clarify logic in BIO_*printf functions
authorMatt Caswell <matt@openssl.org>
Mon, 27 Apr 2015 14:41:03 +0000 (15:41 +0100)
committerMatt Caswell <matt@openssl.org>
Thu, 30 Apr 2015 22:21:53 +0000 (23:21 +0100)
commitabc7a266a38b3122977bbf9049c61b6297343004
tree91865a51868219f6913aabc389c8096994c99af6
parent33c99f2c8169807660b46d49c3e735cfa09a6e0c
Clarify logic in BIO_*printf functions

The static function dynamically allocates an output buffer if the output
grows larger than the static buffer that is normally used. The original
logic implied that |currlen| could be greater than |maxlen| which is
incorrect (and if so would cause a buffer overrun). Also the original
logic would call OPENSSL_malloc to create a dynamic buffer equal to the
size of the static buffer, and then immediately call OPENSSL_realloc to
make it bigger, rather than just creating a buffer than was big enough in
the first place. Thanks to Kevin Wojtysiak (Int3 Solutions) and Paramjot
Oberoi (Int3 Solutions) for reporting this issue.

Reviewed-by: Andy Polyakov <appro@openssl.org>
(cherry picked from commit 9d9e37744cd5119f9921315864d1cd28717173cd)
crypto/bio/b_print.c