diff options
author | 2019-08-14 04:48:13 +0000 | |
---|---|---|
committer | 2019-08-14 04:48:13 +0000 | |
commit | 497d37e3d06fd7920b952507c3970364920518db (patch) | |
tree | acaeb090da6ca93e91a3bd56c70b9d664d708c68 /lib | |
parent | Fix ber_scanf_elements for traphandler: (diff) | |
download | wireguard-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.c | 6 |
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); |