Re: [PATCH] pytest: fix out of bounds access to bad_pattern_ids

Simon Glass <[email protected]>
Newsgroups org.u-boot-project.lists.u-boot
Message-ID <CAFLszTgPDptKG0Xi4+ESA5zweMW-5fxv1B=bFnCM4zziQC4n=g@mail.gmail.com>
Hi Denis,

On 2026-07-29T08:23:51, NG, BOON KHAI via U-Boot
<[email protected]> wrote:
> pytest: fix out of bounds access to bad_pattern_ids

Subject is fine, but please sharpen the body: with pattern_lab_mode at
index 1, every bad-pattern index is off by one, so the wrong id is
reported and a match on the final bad pattern indexes past the end of
bad_pattern_ids.

>
> 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]>
>
> 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
> @@ -212,24 +212,24 @@ class ConsoleBase(object):
> -                    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)])

The fix is correct. Please hoist the length into a local so the offset
arithmetic reads more clearly, e.g.:

    extra_patterns = [pattern_u_boot_spl_signon, pattern_lab_mode]
    base = len(extra_patterns)
    m = self.p.expect(extra_patterns + self.bad_patterns)
    ...
    raise BootFail('Bad pattern found on SPL console: ' +
                   self.bad_pattern_ids[m - base])

Same for the main-signon block below. What do you think?

BTW while you are here, please double-check the other
bad_pattern_ids[m - 1] sites in this file - the pattern is only
correct where exactly one non-bad pattern precedes self.bad_patterns.

Regards,
Simon
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.