summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrob <rob@openbsd.org>2019-08-14 23:17:08 +0000
committerrob <rob@openbsd.org>2019-08-14 23:17:08 +0000
commit376546cc200c4d5c75a6664a69d2cfad9a82fd59 (patch)
treec65726d2e9f4cbf6133c1e5247e61ebf101ec3ff
parentrevert the inet6 format diff, regression observed by florian@ (diff)
downloadwireguard-openbsd-376546cc200c4d5c75a6664a69d2cfad9a82fd59.tar.xz
wireguard-openbsd-376546cc200c4d5c75a6664a69d2cfad9a82fd59.zip
Add test case for ber_scanf_elements.
Significant tweak by and ok martijn@
-rw-r--r--regress/lib/libutil/ber/ber_test.c49
1 files changed, 48 insertions, 1 deletions
diff --git a/regress/lib/libutil/ber/ber_test.c b/regress/lib/libutil/ber/ber_test.c
index f28296c5cc3..097dbaafc8f 100644
--- a/regress/lib/libutil/ber/ber_test.c
+++ b/regress/lib/libutil/ber/ber_test.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ber_test.c,v 1.17 2019/06/01 19:44:47 rob Exp $
+/* $OpenBSD: ber_test.c,v 1.18 2019/08/14 23:17:08 rob Exp $
*/
/*
* Copyright (c) Rob Pierce <rob@openbsd.org>
@@ -678,6 +678,47 @@ test_ber_printf_elements_snmp_v3_encode(void) {
}
int
+test_ber_null(void)
+{
+ long long val;
+ struct ber_element *elm = NULL;
+
+ /* scanning into a null ber_element should fail */
+ if (ber_scanf_elements(elm, "0", &val) != -1) {
+ printf("failed (null ber_element) ber_scanf_elements empty\n");
+ goto fail;
+ }
+
+ if ((elm = ber_printf_elements(elm, "{d}", 1)) == NULL) {
+ printf("failed (null ber_element) ber_printf_elements\n");
+ }
+
+ /*
+ * Scanning after the last valid element should be able to descent back
+ * into the parent level.
+ */
+ if (ber_scanf_elements(elm, "{i}", &val) != 0) {
+ printf("failed (null ber_element) ber_scanf_elements valid\n");
+ goto fail;
+ }
+ /*
+ * Scanning for a non-existent element should fail, even if it's just a
+ * skip.
+ */
+ if (ber_scanf_elements(elm, "{lS}", &val) != -1) {
+ printf("failed (null ber_element) ber_scanf_elements invalid\n");
+ goto fail;
+ }
+
+ ber_free_elements(elm);
+ return 0;
+
+fail:
+ ber_free_elements(elm);
+ return 1;
+}
+
+int
main(void)
{
extern char *__progname;
@@ -724,6 +765,12 @@ main(void)
} else
printf("SUCCESS: test_ber_printf_elements_snmpd_v3_encode\n");
+ if (test_ber_null() != 0) {
+ printf("FAILED: test_ber_null\n");
+ ret = 1;
+ } else
+ printf("SUCCESS: test_ber_null\n");
+
if (ret != 0) {
printf("FAILED: %s\n", __progname);
return 1;