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:26:07 +0000 (23:26 +0100)
commitd889682208e4e75bca78f862b8e509a5b61b01f6
tree6c6f2bcdf17cc34e57a9392edfcb446771956a3f
parent951ede2a06eba9a71c5d40b25f924e97f443c437
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