1/*	$NetBSD: sec-2853.c,v 1.2 2020/05/25 20:47:37 christos Exp $	*/
2
3#include <config.h>
4
5#include <rc_cmdlength.h>
6
7#include "unity.h"
8
9void setUp(void);
10void tearDown(void);
11
12void test_main( void );
13int basic_good( void );
14int embedded_nul( void );
15int trailing_space( void );
16
17static int verbose = 1;        // if not 0, also print results if test passed
18// static int exit_on_err = 0;    // if not 0, exit if test failed
19
20
21void setUp(void)
22{
23}
24
25
26void tearDown(void)
27{
28}
29
30
31/*
32 * Test function calling the remote config buffer checker
33 * http://bugs.ntp.org/show_bug.cgi?id=2853
34 *
35 * size_t remoteconfig_cmdlength(const char *src_buf, const char *src_end)
36 * - trims whitespace & garbage from the right
37 * then looks for only \tSP-\127 starting from the left.
38 * It returns the number of "good" characters it found.
39 */
40
41
42void test_main( void )
43{
44	TEST_ASSERT_EQUAL(0, basic_good());
45	TEST_ASSERT_EQUAL(0, embedded_nul());
46	TEST_ASSERT_EQUAL(0, trailing_space());
47}
48
49
50int basic_good( void )
51{
52	const char string[] = "good";
53	const char *EOstring;
54	size_t len;
55	int failed;
56
57	EOstring = string + sizeof string;
58
59	len = remoteconfig_cmdlength(string, EOstring);
60
61	failed = ( 4 != len );
62
63	if ( failed || verbose )
64		printf( "remoteconfig_cmdlength(\"%s\") returned %llu, expected %u: %s\n",
65			string,
66			(unsigned long long)len,
67			4,
68			failed ? "NO <<" : "yes" );
69
70	return failed ? -1 : 0;
71}
72
73
74int embedded_nul( void )
75{
76	const char string[] = "nul\0 there";
77	const char *EOstring;
78	size_t len;
79	int failed;
80
81	EOstring = string + sizeof string;
82
83	len = remoteconfig_cmdlength(string, EOstring);
84
85	failed = ( 3 != len );
86
87	if ( failed || verbose )
88		printf( "remoteconfig_cmdlength(\"%s\") returned %llu, expected %u: %s\n",
89			string,
90			(unsigned long long)len,
91			3,
92			failed ? "NO <<" : "yes" );
93
94	return failed ? -1 : 0;
95}
96
97
98int trailing_space( void )
99{
100	const char string[] = "trailing space ";
101	const char *EOstring;
102	size_t len;
103	int failed;
104
105	EOstring = string + sizeof string;
106
107	len = remoteconfig_cmdlength(string, EOstring);
108
109	failed = ( 14 != len );
110
111	if ( failed || verbose )
112		printf( "remoteconfig_cmdlength(\"%s\") returned %llu, expected %u: %s\n",
113			string,
114			(unsigned long long)len,
115			14,
116			failed ? "NO <<" : "yes" );
117
118	return failed ? -1 : 0;
119}
120