Commit 1d4c06d5 authored by Rae Moar's avatar Rae Moar Committed by Shuah Khan
Browse files

kunit: tool: Fix bug in parsing test plan

A bug was identified where the KTAP below caused an infinite loop:

 TAP version 13
 ok 4 test_case
 1..4

The infinite loop was caused by the parser not parsing a test plan
if following a test result line.

Fix this bug by parsing test plan line to avoid the infinite loop.

Link: https://lore.kernel.org/r/20250313192714.1380005-1-rmoar@google.com


Signed-off-by: default avatarRae Moar <rmoar@google.com>
Reviewed-by: default avatarDavid Gow <davidgow@google.com>
Signed-off-by: default avatarShuah Khan <shuah@kernel.org>
parent c104c160
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -759,7 +759,7 @@ def parse_test(lines: LineStream, expected_num: int, log: List[str], is_subtest:
		# If parsing the main/top-level test, parse KTAP version line and
		# test plan
		test.name = "main"
		ktap_line = parse_ktap_header(lines, test, printer)
		parse_ktap_header(lines, test, printer)
		test.log.extend(parse_diagnostic(lines))
		parse_test_plan(lines, test)
		parent_test = True
@@ -768,13 +768,12 @@ def parse_test(lines: LineStream, expected_num: int, log: List[str], is_subtest:
		# the KTAP version line and/or subtest header line
		ktap_line = parse_ktap_header(lines, test, printer)
		subtest_line = parse_test_header(lines, test)
		parent_test = (ktap_line or subtest_line)
		if parent_test:
			# If KTAP version line and/or subtest header is found, attempt
			# to parse test plan and print test header
		test.log.extend(parse_diagnostic(lines))
		parse_test_plan(lines, test)
		parent_test = (ktap_line or subtest_line)
		if parent_test:
			print_test_header(test, printer)

	expected_count = test.expected_count
	subtests = []
	test_num = 1