diff options
author | Pedro Alves <palves@redhat.com> | 2016-10-28 12:03:18 +0100 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2016-10-28 15:52:27 +0100 |
commit | f610ab6d3cbab5d8b8ef3f3a93dd81a800ec5725 (patch) | |
tree | 1b55ebc21b3c3a8f9c256b76191ea39af14aefbf /gdb | |
parent | b129b0cacd4c8e982605b7c8d99e96c74155882a (diff) | |
download | gdb-f610ab6d3cbab5d8b8ef3f3a93dd81a800ec5725.zip gdb-f610ab6d3cbab5d8b8ef3f3a93dd81a800ec5725.tar.gz gdb-f610ab6d3cbab5d8b8ef3f3a93dd81a800ec5725.tar.bz2 |
gdb/testsuite: Avoid a buffer overrun in `gdb.base/maint.exp'
Fixes:
PASS: gdb.base/maint.exp: maint w/o args
ERROR: internal buffer is full.
UNRESOLVED: gdb.base/maint.exp: maint info line-table w/o a file name
The problem is just many symtabs and long line tables, enough to
overflow the expect buffer. Fix this by matching input incrementally.
gdb/testsuite/ChangeLog:
2016-10-28 Pedro Alves <palves@redhat.com>
* gdb.base/maint.exp <maint info line-table w/o a file name>: Use
gdb_test_multiple, tighten regexps and match symtabs and line
tables incrementally.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/maint.exp | 38 |
2 files changed, 41 insertions, 3 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 31b82eb..52038e3 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2016-10-28 Pedro Alves <palves@redhat.com> + + * gdb.base/maint.exp <maint info line-table w/o a file name>: Use + gdb_test_multiple, tighten regexps and match symtabs and line + tables incrementally. + 2016-10-28 Luis Machado <lgustavo@codesourcery.com> * gdb.base/foll-exec.exp (do_exec_tests): Make test pattern more diff --git a/gdb/testsuite/gdb.base/maint.exp b/gdb/testsuite/gdb.base/maint.exp index e66f566..b07b370 100644 --- a/gdb/testsuite/gdb.base/maint.exp +++ b/gdb/testsuite/gdb.base/maint.exp @@ -474,9 +474,41 @@ gdb_test "maint" \ "\"maintenance\" must be followed by the name of a maintenance command\\.\r\nList.*unambiguous\\..*" \ "maint w/o args" -gdb_test "maint info line-table" \ - "symtab: \[^\n\r\]+${srcfile}.*\\(\\(struct symtab \\*\\) $hex\\)\r\nlinetable: \\(\\(struct linetable \\*\\) $hex\\):\r\nINDEX.*LINE.*ADDRESS.*" \ - "maint info line-table w/o a file name" +# Test that "main info line-table" w/o a file name shows the symtab for +# $srcfile. +set saw_srcfile 0 +set test "maint info line-table w/o a file name" +gdb_test_multiple "maint info line-table" $test { + -re "symtab: \[^\n\r\]+${srcfile} \\(\\(struct symtab \\*\\) $hex\\)\r\nlinetable: \\(\\(struct linetable \\*\\) $hex\\):\r\nINDEX\[ \t\]+LINE\[ \t\]+ADDRESS" { + set saw_srcfile 1 + exp_continue + } + -re "symtab: \[^\n\r\]+ \\(\\(struct symtab \\*\\) $hex\\)\r\nlinetable: \\(\\(struct linetable \\*\\) $hex\\):\r\nINDEX\[ \t\]+LINE\[ \t\]+ADDRESS" { + # Match each symtab to avoid overflowing expect's buffer. + exp_continue + } + -re "$decimal\[ \t\]+$decimal\[ \t\]+$hex\r\n" { + # Line table entries can be long too: + # + # INDEX LINE ADDRESS + # 0 29 0x00000000004006f6 + # 1 30 0x00000000004006fa + # 2 31 0x0000000000400704 + # 3 42 0x0000000000400706 + # 4 43 0x0000000000400719 + # 5 44 0x0000000000400722 + # 6 45 0x0000000000400740 + # (...) + # 454 129 0x00007ffff7df1d28 + # 455 0 0x00007ffff7df1d3f + # + # Match each line to avoid overflowing expect's buffer. + exp_continue + } + -re "$gdb_prompt $" { + gdb_assert $saw_srcfile $test + } +} gdb_test "maint info line-table ${srcfile}" \ "symtab: \[^\n\r\]+${srcfile}.*INDEX.*LINE.*ADDRESS.*" \ |