Fix crash on Python frame filters with unreadable arg
authorJan Kratochvil <jan.kratochvil@redhat.com>
Sun, 7 Sep 2014 12:09:59 +0000 (14:09 +0200)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Sun, 7 Sep 2014 12:09:59 +0000 (14:09 +0200)
commitc75bd3a23915c3122070a95e1974e323543ffbe4
treeb77abdb70d52ad3052bfaed61527653472ab534a
parent3f9d8762a4b24873f22197d004a8710e9a8557ca
Fix crash on Python frame filters with unreadable arg

https://bugzilla.redhat.com/show_bug.cgi?id=1126177

ERROR: AddressSanitizer: SEGV on unknown address 0x000000000050 (pc 0x000000992bef sp 0x7ffff9039530 bp 0x7ffff9039540
T0)
    #0 0x992bee in value_type .../gdb/value.c:925
    #1 0x87c951 in py_print_single_arg python/py-framefilter.c:445
    #2 0x87cfae in enumerate_args python/py-framefilter.c:596
    #3 0x87e0b0 in py_print_args python/py-framefilter.c:968

It crashes because frame_arg::val is documented it may contain NULL
(frame_arg::error is then non-NULL) but the code does not handle it.

Another bug is that py_print_single_arg() calls goto out of its TRY_CATCH
which messes up GDB cleanup chain crashing GDB later.

It is probably 7.7 regression (I have not verified it) due to the introduction
of Python frame filters.

gdb/ChangeLog

PR python/17355
* python/py-framefilter.c (py_print_single_arg): Handle NULL FA->VAL.
Fix goto out of TRY_CATCH.

gdb/testsuite/ChangeLog

PR python/17355
* gdb.python/amd64-py-framefilter-invalidarg.S: New file.
* gdb.python/py-framefilter-invalidarg-gdb.py.in: New file.
* gdb.python/py-framefilter-invalidarg.exp: New file.
* gdb.python/py-framefilter-invalidarg.py: New file.
gdb/ChangeLog
gdb/python/py-framefilter.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.python/amd64-py-framefilter-invalidarg.S [new file with mode: 0644]
gdb/testsuite/gdb.python/py-framefilter-invalidarg-gdb.py.in [new file with mode: 0644]
gdb/testsuite/gdb.python/py-framefilter-invalidarg.exp [new file with mode: 0644]
gdb/testsuite/gdb.python/py-framefilter-invalidarg.py [new file with mode: 0644]