Skip to content

Commit

Permalink
gdb/testsuite: add test for Python commands redefining itself
Browse files Browse the repository at this point in the history
This commit adds a test that creates a Python command that redefines
itself during its execution. This is to test use-after-free in
execute_command ().

This test needs run with ASan enabled in order to fail when it
should.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
  • Loading branch information
janvrany committed Dec 16, 2022
1 parent d88cb73 commit 429f0cd
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions gdb/testsuite/gdb.python/py-cmd.exp
Expand Up @@ -300,3 +300,33 @@ gdb_test_multiple "test_multiline" $test {
pass $test
}
}

# Test command redefining itself

proc_with_prefix test_command_redefining_itself {} {
# Start with a fresh gdb
clean_restart


gdb_test_multiline "input command redefining itself" \
"python" "" \
"class redefine_cmd (gdb.Command):" "" \
" def __init__ (self, msg):" "" \
" super (redefine_cmd, self).__init__ (\"redefine_cmd\", gdb.COMMAND_OBSCURE)" "" \
" self._msg = msg" "" \
" def invoke (self, arg, from_tty):" "" \
" print (\"redefine_cmd output, msg = %s\" % self._msg)" "" \
" redefine_cmd (arg)" "" \
"redefine_cmd (\"XXX\")" "" \
"end" ""

gdb_test "redefine_cmd AAA" \
"redefine_cmd output, msg = XXX" \
"call command redefining itself 1"

gdb_test "redefine_cmd BBB" \
"redefine_cmd output, msg = AAA" \
"call command redefining itself 2"
}

test_command_redefining_itself

0 comments on commit 429f0cd

Please sign in to comment.