From: Denis Mukhin <[email protected]> 

Current logic in ConsoleBase() mislabels every bad pattern and walks
pattern past the end when the last one matches.

Ensure out of bound access to bad_pattern_ids is handled correctly
while processing test console output.

Fixes: 8308a5eed6e6 ("test: Introduce lab mode")
Signed-off-by: Denis Mukhin <[email protected]>
---
I hit that while testing reset v5 series in the CI:
  https://github.com/dmkhn/u-boot/commits/u/x86-reset-v5/
---
 test/py/console_base.py | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/test/py/console_base.py b/test/py/console_base.py
index 88d444b44b88..8b373fd4d95f 100644
--- a/test/py/console_base.py
+++ b/test/py/console_base.py
@@ -212,24 +212,24 @@ class ConsoleBase(object):
             while not self.lab_mode and loop_num > 0:
                 loop_num -= 1
                 while config_spl_serial and not env_spl_skipped and 
env_spl_banner_times > 0:
-                    m = self.p.expect([pattern_u_boot_spl_signon,
-                                       pattern_lab_mode] + self.bad_patterns)
+                    extra_patterns = [pattern_u_boot_spl_signon, 
pattern_lab_mode]
+                    m = self.p.expect(extra_patterns + self.bad_patterns)
                     if m == 1:
                         self.set_lab_mode()
                         break
                     elif m != 0:
                         raise BootFail('Bad pattern found on SPL console: ' +
-                                       self.bad_pattern_ids[m - 1])
+                                       self.bad_pattern_ids[m - 
len(extra_patterns)])
                     env_spl_banner_times -= 1
 
                 if not self.lab_mode:
-                    m = self.p.expect([pattern_u_boot_main_signon,
-                                       pattern_lab_mode] + self.bad_patterns)
+                    extra_patterns = [pattern_u_boot_main_signon, 
pattern_lab_mode]
+                    m = self.p.expect(extra_patterns + self.bad_patterns)
                     if m == 1:
                         self.set_lab_mode()
                     elif m != 0:
                         raise BootFail('Bad pattern found on console: ' +
-                                       self.bad_pattern_ids[m - 1])
+                                       self.bad_pattern_ids[m - 
len(extra_patterns)])
             if not self.lab_mode:
                 self.u_boot_version_string = self.p.after
             while True:
-- 
2.54.0

Reply via email to