summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authortb <tb@openbsd.org>2021-03-25 09:26:17 +0000
committertb <tb@openbsd.org>2021-03-25 09:26:17 +0000
commit386d3c6d4355c50e43164e059beaed6fb0e2fe86 (patch)
tree9e54f24cc32b323eb566d024576b3776f66ed60b /lib
parentremove uneeded includes in md armv7 files (diff)
downloadwireguard-openbsd-386d3c6d4355c50e43164e059beaed6fb0e2fe86.tar.xz
wireguard-openbsd-386d3c6d4355c50e43164e059beaed6fb0e2fe86.zip
Avoid mangled output in BIO_debug_callback
Instead of blindly skipping 14 characters, we can use the return value of snprintf() to determine how much we should skip. From Martin Vahlensieck with minor tweaks by me
Diffstat (limited to 'lib')
-rw-r--r--lib/libcrypto/bio/bio_cb.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/libcrypto/bio/bio_cb.c b/lib/libcrypto/bio/bio_cb.c
index ab0e3a92cee..52cdd24177b 100644
--- a/lib/libcrypto/bio/bio_cb.c
+++ b/lib/libcrypto/bio/bio_cb.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: bio_cb.c,v 1.16 2014/12/08 03:54:19 bcook Exp $ */
+/* $OpenBSD: bio_cb.c,v 1.17 2021/03/25 09:26:17 tb Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@@ -70,15 +70,22 @@ BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi, long argl,
BIO *b;
char buf[256];
char *p;
+ int nbuf;
long r = 1;
size_t p_maxlen;
if (BIO_CB_RETURN & cmd)
r = ret;
- snprintf(buf, sizeof buf, "BIO[%p]:", bio);
- p = &(buf[14]);
- p_maxlen = sizeof buf - 14;
+ nbuf = snprintf(buf, sizeof(buf), "BIO[%p]: ", bio);
+ if (nbuf < 0)
+ nbuf = 0; /* Ignore error; continue printing. */
+ if (nbuf >= sizeof(buf))
+ goto out;
+
+ p = buf + nbuf;
+ p_maxlen = sizeof(buf) - nbuf;
+
switch (cmd) {
case BIO_CB_FREE:
snprintf(p, p_maxlen, "Free - %s\n", bio->method->name);
@@ -136,6 +143,7 @@ BIO_debug_callback(BIO *bio, int cmd, const char *argp, int argi, long argl,
break;
}
+ out:
b = (BIO *)bio->cb_arg;
if (b != NULL)
BIO_write(b, buf, strlen(buf));