From: Tom de Vries <tdevries@suse.de>
To: Andrew Burgess <aburgess@redhat.com>, gdb-patches@sourceware.org
Cc: Guinevere Larsen <guinevere@redhat.com>
Subject: Re: [PATCH] gdb/testsuite: work around empty substring bug in expect
Date: Wed, 27 Aug 2025 08:24:08 +0200 [thread overview]
Message-ID: <c31d08e4-75b9-4e24-81d3-ea8bea12665d@suse.de> (raw)
In-Reply-To: <be288fecba0f90f1f874e1c6e236afbd01802900.1756218901.git.aburgess@redhat.com>
On 8/26/25 16:35, Andrew Burgess wrote:
> There is a bug in expect, see:
>
> https://sourceforge.net/p/expect/patches/26/
>
> which causes empty substring matches from a regexp to instead return
> the complete input buffer. To reproduce this bug, try this command:
>
> expect -c 'spawn sh -c "echo -n -e \"abc\""; \
> expect -re "(a?)(a)(bc)"; \
> puts "\n"; \
> for { set i 1 } { $i < 4 } { incr i } { \
> puts -nonewline "($i): \""; \
> puts -nonewline $expect_out($i,string); \
> puts "\"" \
> }'
>
> For a working expect the output looks like:
>
> spawn sh -c echo -n -e "abc"
> abc
>
> (1): ""
> (2): "a"
> (3): "bc"
>
> But for a broken expect the output looks like:
>
> spawn sh -c echo -n -e "abc"
> abc
>
> (1): "abc"
> (2): "a"
> (3): "bc"
>
> Notice that (1) is now returning the complete input buffer rather than
> the empty string, this is wrong.
>
> This is not the first time this bug has impacted GDB's testsuite,
> this commit seems to be working around the same problem:
>
> commit e579b537353cd91cb8fac1eaeb69901d4936766f
> Date: Sat Aug 16 20:32:37 2025 +0200
>
> [gdb/testsuite] Fix TUI tests on freebsd
>
> I recently pushed this commit:
>
> commit 3825c972a636852600b47c242826313f4b9963b8
> Date: Wed Jun 18 15:02:29 2025 +0100
>
> gdb: allow gdb.Color to work correctly with pagination
>
> Which added gdb.python/py-color-pagination.exp. Bug PR gdb/33321 was
> then created as the test was failing on some hosts. Turns out, this
> is same expect bug.
>
> The fix presented here is the same as for e579b537353cd91cb8, avoid
> using optional regexp substrings at the start of a regexp, and instead
> use two separate regexp patterns. With this change in place, the test
> now passes on all hosts.
>
> There's no change in what is being tested after this commit.
>
Hi Andrew,
thanks for digging into this.
I've tested this patch on Tumbleweed, and it fixed the problem for me there.
The patch LGTM.
Approved-By: Tom de Vries <tdevries@suse.de>
- Tom
> Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=33321
> ---
> .../gdb.python/py-color-pagination.exp | 36 +++++++++++++------
> 1 file changed, 25 insertions(+), 11 deletions(-)
>
> diff --git a/gdb/testsuite/gdb.python/py-color-pagination.exp b/gdb/testsuite/gdb.python/py-color-pagination.exp
> index 3235fffe5cc..e1ca1f1ce75 100644
> --- a/gdb/testsuite/gdb.python/py-color-pagination.exp
> +++ b/gdb/testsuite/gdb.python/py-color-pagination.exp
> @@ -66,18 +66,25 @@ proc test_pagination { type mode } {
> exp_continue
> }
>
> - -re "^(${::any_color}?)(${::any_color})$::str" {
> + -re "^(${::any_color})(${::any_color})$::str" {
> # After a continuation prompt GDB will restore the previous
> # color, and then we immediately switch to a new color.
> set restored_color $expect_out(1,string)
> - if { $restored_color ne ""
> - && $restored_color ne $expected_restore_color } {
> + if { $restored_color ne $expected_restore_color } {
> set saw_bad_color_handling true
> }
> set last_color $expect_out(2,string)
> exp_continue
> }
>
> + -re "^(${::any_color})$::str" {
> + # This pattern matches printing STR in all cases that are not
> + # immediately after a pagination prompt. In this case there is
> + # a single escape sequence to set the color.
> + set last_color $expect_out(1,string)
> + exp_continue
> + }
> +
> -re "^\033\\\[${::decimal}m$::str" {
> # This catches the case where the color's escape sequence has
> # not been converted back into a full style. This indicates
> @@ -86,18 +93,25 @@ proc test_pagination { type mode } {
> exp_continue
> }
>
> - -re "^((?:\033\\\[m)?)$::pagination_prompt$" {
> + -re "^\033\\\[m$::pagination_prompt$" {
> # After a pagination prompt we expect GDB to restore the last
> # color.
> set expected_restore_color $last_color
>
> - # If we didn't see a color reset sequence then the pagination
> - # prompt will have been printed in the wrong color, this is a
> - # GDB bug.
> - set color_reset $expect_out(1,string)
> - if { $color_reset eq "" } {
> - set saw_bad_color_handling true
> - }
> + # Send '\n' to view more output.
> + send_gdb "\n"
> + exp_continue
> + }
> +
> + -re "^$::pagination_prompt$" {
> + # After a pagination prompt we expect GDB to restore the last
> + # color.
> + set expected_restore_color $last_color
> +
> + # If we didn't see a color reset sequence before the pagination
> + # prompt, then the prompt will have been printed in the wrong
> + # color, this is a GDB bug.
> + set saw_bad_color_handling true
>
> # Send '\n' to view more output.
> send_gdb "\n"
>
> base-commit: 3825c972a636852600b47c242826313f4b9963b8
next prev parent reply other threads:[~2025-08-27 6:25 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-04 9:39 [PATCH 0/2] Python Style API Andrew Burgess
2025-06-04 9:39 ` [PATCH 1/2] gdb/python: add gdb.Style class Andrew Burgess
2025-06-04 9:39 ` [PATCH 2/2] gdb/python: new class gdb.StyleParameterSet Andrew Burgess
2025-06-06 13:38 ` [PATCHv2 0/2] Python Style API Andrew Burgess
2025-06-06 13:38 ` [PATCHv2 1/2] gdb/python: add gdb.Style class Andrew Burgess
2025-06-06 14:21 ` Eli Zaretskii
2025-06-06 13:38 ` [PATCHv2 2/2] gdb/python: new class gdb.StyleParameterSet Andrew Burgess
2025-06-07 10:44 ` [PATCHv3 0/2] Python Style API Andrew Burgess
2025-06-07 10:44 ` [PATCHv3 1/2] gdb/python: add gdb.Style class Andrew Burgess
2025-06-07 10:44 ` [PATCHv3 2/2] gdb/python: new class gdb.StyleParameterSet Andrew Burgess
2025-06-09 15:54 ` [PATCHv3 0/2] Python Style API Andrew Burgess
2025-06-18 19:30 ` [PATCHv4 0/4] " Andrew Burgess
2025-06-18 19:30 ` [PATCHv4 1/4] gdb: allow gdb.Color to work correctly with pagination Andrew Burgess
2025-06-18 19:30 ` [PATCHv4 2/4] gdb/python: add gdb.Style class Andrew Burgess
2025-06-18 19:30 ` [PATCHv4 3/4] gdb/python: new class gdb.StyleParameterSet Andrew Burgess
2025-06-18 19:30 ` [PATCHv4 4/4] gdb: extend gdb.write to support styled output Andrew Burgess
2025-06-25 14:42 ` [PATCHv5 0/4] Python Style API Andrew Burgess
2025-06-25 14:42 ` [PATCHv5 1/4] gdb: allow gdb.Color to work correctly with pagination Andrew Burgess
2025-06-25 14:42 ` [PATCHv5 2/4] gdb/python: add gdb.Style class Andrew Burgess
2025-06-25 14:42 ` [PATCHv5 3/4] gdb/python: new class gdb.StyleParameterSet Andrew Burgess
2025-06-25 14:42 ` [PATCHv5 4/4] gdb/python: extend gdb.write to support styled output Andrew Burgess
2025-07-07 14:43 ` [PATCHv6 0/4] Python Style API Andrew Burgess
2025-07-07 14:43 ` [PATCHv6 1/4] gdb: allow gdb.Color to work correctly with pagination Andrew Burgess
2025-07-07 14:43 ` [PATCHv6 2/4] gdb/python: add gdb.Style class Andrew Burgess
2025-07-07 14:43 ` [PATCHv6 3/4] gdb/python: new class gdb.StyleParameterSet Andrew Burgess
2025-07-07 14:43 ` [PATCHv6 4/4] gdb/python: extend gdb.write to support styled output Andrew Burgess
2025-08-13 10:25 ` [PATCHv7 0/4] Fix for gdb.Color + pagination AND new gdb.Style API Andrew Burgess
2025-08-13 10:25 ` [PATCHv7 1/4] gdb: allow gdb.Color to work correctly with pagination Andrew Burgess
2025-08-24 16:13 ` Andrew Burgess
2025-08-25 10:21 ` Tom de Vries
2025-08-26 14:35 ` [PATCH] gdb/testsuite: work around empty substring bug in expect Andrew Burgess
2025-08-27 6:24 ` Tom de Vries [this message]
2025-08-13 10:29 ` [PATCHv7 2/4] gdb/python: add gdb.Style class Andrew Burgess
2025-08-13 10:30 ` [PATCHv7 4/4] gdb/python: extend gdb.write to support styled output Andrew Burgess
2025-08-13 12:37 ` Eli Zaretskii
2025-08-13 10:34 ` [PATCHv7 3/4] gdb/python: new class gdb.StyleParameterSet Andrew Burgess
2025-08-13 13:05 ` Eli Zaretskii
2025-08-13 13:05 ` Eli Zaretskii
2025-08-27 11:34 ` [PATCHv8 0/3] new gdb.Style API Andrew Burgess
2025-08-27 11:34 ` [PATCHv8 1/3] gdb/python: add gdb.Style class Andrew Burgess
2025-09-16 16:47 ` Tom Tromey
2025-09-23 16:59 ` Andrew Burgess
2025-08-27 11:34 ` [PATCHv8 2/3] gdb/python: new class gdb.StyleParameterSet Andrew Burgess
2025-09-16 16:50 ` Tom Tromey
2025-08-27 11:34 ` [PATCHv8 3/3] gdb/python: extend gdb.write to support styled output Andrew Burgess
2025-09-16 16:56 ` Tom Tromey
2025-09-23 17:05 ` Andrew Burgess
2025-09-23 18:38 ` Tom Tromey
2025-09-23 16:54 ` [PATCHv9 0/3] new gdb.Style API Andrew Burgess
2025-09-23 16:54 ` [PATCHv9 1/3] gdb/python: add gdb.Style class Andrew Burgess
2025-09-23 16:54 ` [PATCHv9 2/3] gdb/python: new class gdb.StyleParameterSet Andrew Burgess
2025-09-23 16:54 ` [PATCHv9 3/3] gdb/python: extend gdb.write to support styled output Andrew Burgess
2025-10-03 19:27 ` [PATCHv9 0/3] new gdb.Style API Tom Tromey
2025-10-05 12:51 ` Andrew Burgess
2025-10-05 15:16 ` Tom de Vries
2025-10-05 17:59 ` Tom Tromey
2025-10-06 9:01 ` Andrew Burgess
2025-10-05 18:03 ` Andrew Burgess
2025-10-05 18:41 ` Tom de Vries
2025-10-06 9:01 ` Andrew Burgess
2025-10-06 12:29 ` Tom de Vries
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c31d08e4-75b9-4e24-81d3-ea8bea12665d@suse.de \
--to=tdevries@suse.de \
--cc=aburgess@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=guinevere@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox