diff options
author | 2019-08-14 23:17:08 +0000 | |
---|---|---|
committer | 2019-08-14 23:17:08 +0000 | |
commit | 376546cc200c4d5c75a6664a69d2cfad9a82fd59 (patch) | |
tree | c65726d2e9f4cbf6133c1e5247e61ebf101ec3ff | |
parent | revert the inet6 format diff, regression observed by florian@ (diff) | |
download | wireguard-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.c | 49 |
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; |