summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authormartijn <martijn@openbsd.org>2019-08-14 04:48:13 +0000
committermartijn <martijn@openbsd.org>2019-08-14 04:48:13 +0000
commit497d37e3d06fd7920b952507c3970364920518db (patch)
treeacaeb090da6ca93e91a3bd56c70b9d664d708c68 /lib
parentFix ber_scanf_elements for traphandler: (diff)
downloadwireguard-openbsd-497d37e3d06fd7920b952507c3970364920518db.tar.xz
wireguard-openbsd-497d37e3d06fd7920b952507c3970364920518db.zip
Make sure that ber in ber_scanf_elements is not NULL before parsing format
where ber is utilized. This also allows us to remove the ber->be_next check, which can cause weird behaviour, because a NULL be_next would result in parsing the last element twice. OK claudio@ on previous version OK rob@
Diffstat (limited to 'lib')
-rw-r--r--lib/libutil/ber.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/libutil/ber.c b/lib/libutil/ber.c
index 4fb4e7baac5..f38d95b9617 100644
--- a/lib/libutil/ber.c
+++ b/lib/libutil/ber.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ber.c,v 1.11 2019/08/05 12:38:14 martijn Exp $ */
+/* $OpenBSD: ber.c,v 1.12 2019/08/14 04:48:13 martijn Exp $ */
/*
* Copyright (c) 2007, 2012 Reyk Floeter <reyk@openbsd.org>
@@ -684,6 +684,8 @@ ber_scanf_elements(struct ber_element *ber, char *fmt, ...)
va_start(ap, fmt);
while (*fmt) {
+ if (ber == NULL && *fmt != '}' && *fmt != ')')
+ goto fail;
switch (*fmt++) {
case 'B':
ptr = va_arg(ap, void **);
@@ -788,8 +790,6 @@ ber_scanf_elements(struct ber_element *ber, char *fmt, ...)
goto fail;
}
- if (ber->be_next == NULL)
- continue;
ber = ber->be_next;
}
va_end(ap);