mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 01:32:21 +02:00
lib/tests: extend cmdline KUnit with next_arg() tests
The cmdline KUnit suite covers get_option() and get_options(), but it
does not exercise next_arg().
Extend the suite with one test for a quoted value containing spaces and
one regression test for a bare quote token after a normal parameter.
The regression test covers the bare quote token path fixed by commit
9847f21225 ("lib/cmdline: avoid page fault in next_arg").
[shuvampandey1@gmail.com: extend cmdline next_arg() coverage with mixed tokens]
Link: https://lore.kernel.org/20260316211249.88601-1-shuvampandey1@gmail.com
Link: https://lore.kernel.org/20260316101227.15807-1-shuvampandey1@gmail.com
Signed-off-by: Shuvam Pandey <shuvampandey1@gmail.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com>
Cc: Neel Natu <neelnatu@google.com>
Cc: Dmitry Antipov <dmantipov@yandex.ru>
Cc: "Darrick J. Wong" <djwong@kernel.org>
Cc: Kees Cook <kees@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
2f5026b8d4
commit
dcc8a57815
|
|
@ -139,11 +139,73 @@ static void cmdline_test_range(struct kunit *test)
|
|||
} while (++i < ARRAY_SIZE(cmdline_test_range_strings));
|
||||
}
|
||||
|
||||
static void cmdline_test_next_arg_quoted_value(struct kunit *test)
|
||||
{
|
||||
char in[] = "foo=\"bar baz\" qux=1";
|
||||
char *next, *param, *val;
|
||||
|
||||
next = next_arg(in, ¶m, &val);
|
||||
KUNIT_EXPECT_STREQ(test, param, "foo");
|
||||
KUNIT_ASSERT_NOT_NULL(test, val);
|
||||
KUNIT_EXPECT_STREQ(test, val, "bar baz");
|
||||
KUNIT_EXPECT_STREQ(test, next, "qux=1");
|
||||
|
||||
next = next_arg(next, ¶m, &val);
|
||||
KUNIT_EXPECT_STREQ(test, param, "qux");
|
||||
KUNIT_ASSERT_NOT_NULL(test, val);
|
||||
KUNIT_EXPECT_STREQ(test, val, "1");
|
||||
KUNIT_EXPECT_STREQ(test, next, "");
|
||||
}
|
||||
|
||||
static void cmdline_test_next_arg_bare_quote_regression(struct kunit *test)
|
||||
{
|
||||
char in[] = "foo=bar \"";
|
||||
char *next, *param, *val;
|
||||
|
||||
next = next_arg(in, ¶m, &val);
|
||||
KUNIT_EXPECT_STREQ(test, param, "foo");
|
||||
KUNIT_ASSERT_NOT_NULL(test, val);
|
||||
KUNIT_EXPECT_STREQ(test, val, "bar");
|
||||
KUNIT_EXPECT_STREQ(test, next, "\"");
|
||||
|
||||
/* This hits the i == 0 quoted-token case fixed by 9847f21225c4. */
|
||||
next = next_arg(next, ¶m, &val);
|
||||
KUNIT_EXPECT_STREQ(test, param, "");
|
||||
KUNIT_EXPECT_PTR_EQ(test, val, NULL);
|
||||
KUNIT_EXPECT_STREQ(test, next, "");
|
||||
}
|
||||
|
||||
static void cmdline_test_next_arg_mixed_tokens(struct kunit *test)
|
||||
{
|
||||
char in[] = "bbb= jjj kkk=\"a=b\"";
|
||||
char *next, *param, *val;
|
||||
|
||||
next = next_arg(in, ¶m, &val);
|
||||
KUNIT_EXPECT_STREQ(test, param, "bbb");
|
||||
KUNIT_ASSERT_NOT_NULL(test, val);
|
||||
KUNIT_EXPECT_STREQ(test, val, "");
|
||||
KUNIT_EXPECT_STREQ(test, next, "jjj kkk=\"a=b\"");
|
||||
|
||||
next = next_arg(next, ¶m, &val);
|
||||
KUNIT_EXPECT_STREQ(test, param, "jjj");
|
||||
KUNIT_EXPECT_NULL(test, val);
|
||||
KUNIT_EXPECT_STREQ(test, next, "kkk=\"a=b\"");
|
||||
|
||||
next = next_arg(next, ¶m, &val);
|
||||
KUNIT_EXPECT_STREQ(test, param, "kkk");
|
||||
KUNIT_ASSERT_NOT_NULL(test, val);
|
||||
KUNIT_EXPECT_STREQ(test, val, "a=b");
|
||||
KUNIT_EXPECT_STREQ(test, next, "");
|
||||
}
|
||||
|
||||
static struct kunit_case cmdline_test_cases[] = {
|
||||
KUNIT_CASE(cmdline_test_noint),
|
||||
KUNIT_CASE(cmdline_test_lead_int),
|
||||
KUNIT_CASE(cmdline_test_tail_int),
|
||||
KUNIT_CASE(cmdline_test_range),
|
||||
KUNIT_CASE(cmdline_test_next_arg_quoted_value),
|
||||
KUNIT_CASE(cmdline_test_next_arg_bare_quote_regression),
|
||||
KUNIT_CASE(cmdline_test_next_arg_mixed_tokens),
|
||||
{}
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user