This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Failures seen in test_gdb on buildbots
Type: Stage: patch review
Components: Versions: Python 2.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: dmalcolm Nosy List: dmalcolm, loewis, pitrou
Priority: normal Keywords: buildbot, patch

Created on 2010-04-07 00:45 by dmalcolm, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
fix-test_gdb-deprection-warning.patch dmalcolm, 2010-04-07 16:43 Use BaseException.args, rather than BaseException.message in test_gdb PrettyPrintTests.test_unicode, to fix deprecation warning on narrow unicode builds review
fix-overfussy-gdb_text_corruption-tests-and-deprecation-warning.patch dmalcolm, 2010-04-07 22:26 review
Messages (6)
msg102509 - (view) Author: Dave Malcolm (dmalcolm) (Python committer) Date: 2010-04-07 00:45
http://www.python.org/dev/buildbot/trunk/builders/alpha%20Debian%20trunk/builds/52/steps/test/logs/stdio
shows some failures in test_gdb:

======================================================================
FAIL: test_corrupt_ob_type (test.test_gdb.PrettyPrintTests)
Ensure that a PyObject* with a corrupt ob_type is handled gracefully
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/doko/buildarea/trunk.klose-debian-alpha/build/Lib/test/test_gdb.py", line 361, in test_corrupt_ob_type
    'set op->ob_type=0xDEADBEEF')
  File "/home/doko/buildarea/trunk.klose-debian-alpha/build/Lib/test/test_gdb.py", line 341, in assertSane
    (gdb_repr, gdb_output))
AssertionError: Unexpected gdb representation: '< at remote 0x1202cf5a8>'
Breakpoint 1 at 0x12007a9e8: file Objects/object.c, line 330.
[Thread debugging using libthread_db enabled]

Breakpoint 1, PyObject_Print (op=42, fp=0x200002f87b0, flags=1)
    at Objects/object.c:330
330		return internal_print(op, fp, flags, 0);
#0  PyObject_Print (op=< at remote 0x1202cf5a8>, fp=0x200002f87b0, flags=1)
    at Objects/object.c:330
#1  0x000000012003eaa0 in file_PyObject_Print (op=< at remote 0x1202cf5a8>, f=
    0x20000326280, flags=1) at Objects/fileobject.c:110
#2  0x0000000120045bc8 in PyFile_WriteObject (v=< at remote 0x1202cf5a8>, f=
    <file at remote 0x20000326280>, flags=1) at Objects/fileobject.c:2470
#3  0x000000012010bb90 in PyEval_EvalFrameEx (f=
    Frame 0x1203a0ba0, for file <string>, line 1, in <module> (), throwflag=0)
    at Python/ceval.c:1769
#4  0x00000001201134bc in PyEval_EvalCodeEx (co=0x120305880, globals=
    {'__builtins__': <module at remote 0x20000337470>, '__name__': '__main__', '__doc__': None, '__package__': None}, locals=
    {'__builtins__': <module at remote 0x20000337470>, '__name__': '__main__', '__doc__': None, '__package__': None}, args=0x0, argcount=0, kws=0x0, 
    kwcount=0, defs=0x0, defcount=0, closure=0x0) at Python/ceval.c:3253
#5  0x0000000120107294 in PyEval_EvalCode (co=0x120305880, globals=
    {'__builtins__': <module at remote 0x20000337470>, '__name__': '__main__', '__doc__': None, '__package__': None}, locals=
    {'__builtins__': <module at remote 0x20000337470>, '__name__': '__main__', '__doc__': None, '__package__': None}) at Python/ceval.c:666
#6  0x0000000120152e08 in run_mod (mod=0x12038b848, filename=
    0x12021cf00 "<string>", globals=
    {'__builtins__': <module at remote 0x20000337470>, '__name__': '__main__', '__doc__': None, '__package__': None}, locals=
    {'__builtins__': <module at remote 0x20000337470>, '__name__': '__main__', '__doc__': None, '__package__': None}, flags=0x11f48b4d8, arena=0x1203406b0)
    at Python/pythonrun.c:1340
#7  0x0000000120152c2c in PyRun_StringFlags (str=0x1202b2010 "print 42\n", 
    start=257, globals=
    {'__builtins__': <module at remote 0x20000337470>, '__name__': '__main__', '__doc__': None, '__package__': None}, locals=
    {'__builtins__': <module at remote 0x20000337470>, '__name__': '__main__', '__doc__': None, '__package__': None}, flags=0x11f48b4d8)
    at Python/pythonrun.c:1303
#8  0x0000000120150f50 in PyRun_SimpleStringFlags (command=
    0x1202b2010 "print 42\n", flags=0x11f48b4d8) at Python/pythonrun.c:962
#9  0x00000001200185a0 in Py_Main (argc=4, argv=0x11f48b6b8)
    at Modules/main.c:525
#10 0x0000000120016e88 in main (argc=4, argv=0x11f48b6b8)
    at ./Modules/python.c:23


======================================================================
FAIL: test_corrupt_tp_name (test.test_gdb.PrettyPrintTests)
Ensure that a PyObject* with a type with corrupt tp_name is handled
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/doko/buildarea/trunk.klose-debian-alpha/build/Lib/test/test_gdb.py", line 372, in test_corrupt_tp_name
    'set op->ob_type->tp_name=0xDEADBEEF')
  File "/home/doko/buildarea/trunk.klose-debian-alpha/build/Lib/test/test_gdb.py", line 341, in assertSane
    (gdb_repr, gdb_output))
AssertionError: Unexpected gdb representation: '42'
Breakpoint 1 at 0x12007a9e8: file Objects/object.c, line 330.
[Thread debugging using libthread_db enabled]

Breakpoint 1, PyObject_Print (op=42, fp=0x200002f87b0, flags=1)
    at Objects/object.c:330
330		return internal_print(op, fp, flags, 0);
#0  PyObject_Print (op=42, fp=0x200002f87b0, flags=1) at Objects/object.c:330
#1  0x000000012003eaa0 in file_PyObject_Print (op=42, f=0x20000326280, flags=1)
    at Objects/fileobject.c:110
#2  0x0000000120045bc8 in PyFile_WriteObject (v=42, f=
    <file at remote 0x20000326280>, flags=1) at Objects/fileobject.c:2470
#3  0x000000012010bb90 in PyEval_EvalFrameEx (f=
    Frame 0x1203a0ba0, for file <string>, line 1, in <module> (), throwflag=0)
    at Python/ceval.c:1769
#4  0x00000001201134bc in PyEval_EvalCodeEx (co=0x120305880, globals=
    {'__builtins__': <module at remote 0x20000337470>, '__name__': '__main__', '__doc__': None, '__package__': None}, locals=
    {'__builtins__': <module at remote 0x20000337470>, '__name__': '__main__', '__doc__': None, '__package__': None}, args=0x0, argcount=0, kws=0x0, 
    kwcount=0, defs=0x0, defcount=0, closure=0x0) at Python/ceval.c:3253
#5  0x0000000120107294 in PyEval_EvalCode (co=0x120305880, globals=
    {'__builtins__': <module at remote 0x20000337470>, '__name__': '__main__', '__doc__': None, '__package__': None}, locals=
    {'__builtins__': <module at remote 0x20000337470>, '__name__': '__main__', '__doc__': None, '__package__': None}) at Python/ceval.c:666
#6  0x0000000120152e08 in run_mod (mod=0x12038b848, filename=
    0x12021cf00 "<string>", globals=
    {'__builtins__': <module at remote 0x20000337470>, '__name__': '__main__', '__doc__': None, '__package__': None}, locals=
    {'__builtins__': <module at remote 0x20000337470>, '__name__': '__main__', '__doc__': None, '__package__': None}, flags=0x11f4174d8, arena=0x1203406b0)
    at Python/pythonrun.c:1340
#7  0x0000000120152c2c in PyRun_StringFlags (str=0x1202b2010 "print 42\n", 
    start=257, globals=
    {'__builtins__': <module at remote 0x20000337470>, '__name__': '__main__', '__doc__': None, '__package__': None}, locals=
    {'__builtins__': <module at remote 0x20000337470>, '__name__': '__main__', '__doc__': None, '__package__': None}, flags=0x11f4174d8)
    at Python/pythonrun.c:1303
#8  0x0000000120150f50 in PyRun_SimpleStringFlags (command=
    0x1202b2010 "print 42\n", flags=0x11f4174d8) at Python/pythonrun.c:962
#9  0x00000001200185a0 in Py_Main (argc=4, argv=0x11f4176b8)
    at Modules/main.c:525
#10 0x0000000120016e88 in main (argc=4, argv=0x11f4176b8)
    at ./Modules/python.c:23


----------------------------------------------------------------------
Ran 31 tests in 27.624s

FAILED (failures=2)
msg102546 - (view) Author: Dave Malcolm (dmalcolm) (Python committer) Date: 2010-04-07 16:43
There's also a deprecation warning in that log:
/home/doko/buildarea/trunk.klose-debian-alpha/build/Lib/test/test_gdb.py:229: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
  if e.message != 'unichr() arg not in range(0x10000) (narrow Python build)':

I'm attaching a fix for this; tested with -Wd and it works.

This doesn't yet address the other two failures.
msg102571 - (view) Author: Dave Malcolm (dmalcolm) (Python committer) Date: 2010-04-07 22:26
Both of the failing tests use "set" inside gdb to try to corrupt the memory of the inferior process.

I believe the issue here is that reading through 0xDEADBEEF within gdb on this machine isn't generating a RuntimeError; perhaps that _is_ a valid pointer in the address space of that process (or perhaps we're seeing another gdb-vs-gdb version difference aka issue #8279)

Within PrettyPrintTests.test_corrupt_tp_name, such a situation leads to the use of tp_flags, and the presence of Py_TPFLAGS_INT_SUBCLASS leads to python-gdb.py using PyIntObject, and it correctly print "42", even after op->ob_type->tp_name now has a garbage value, whereas the test was expecting the fallback handler.

Within PrettyPrintTests.test_corrupt_ob_type, it appears that we're using FakeRepr, and that ((PyTypeObject*)0xDEADBEEF->tp_name) within the process pointed at a NUL byte, when my code was expecting gdb to fail to read through ((PyTypeObject*)0xDEADBEEF->tp_name) with a RuntimeError.

I'm attaching a patch which tries to generalize the expected output from these tests, so that they pass if the corruption in the inferior process doesn't manage to confuse gdb, and if 0xDEADBEEF happens to point at something unexpected.

I tested this with PrettyPrintTests active (it continues to all pass on my machine), but commented it out when generating the patch.

This also includes the fix for the DeprecationWarning mentioned in msg102546
msg102917 - (view) Author: Martin v. Löwis (loewis) * (Python committer) Date: 2010-04-12 05:23
I have now applied file16808 as r79986. I'm detaching file16804, as it was superceded by the other patch. I also reenabled all tests in r79987, to see how the buildbots react.
msg160885 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2012-05-16 16:42
Shouldn't this be closed?
msg160895 - (view) Author: Dave Malcolm (dmalcolm) (Python committer) Date: 2012-05-16 17:50
Oops; closing.  Thanks.
History
Date User Action Args
2022-04-11 14:56:59adminsetgithub: 52577
2012-05-16 17:50:10dmalcolmsetstatus: open -> closed
resolution: fixed
messages: + msg160895
2012-05-16 16:42:22pitrousetnosy: + pitrou
messages: + msg160885
2010-04-12 05:23:31loewissetmessages: + msg102917
2010-04-08 15:51:30dmalcolmsetnosy: + loewis
2010-04-07 22:26:46dmalcolmsetfiles: + fix-overfussy-gdb_text_corruption-tests-and-deprecation-warning.patch

messages: + msg102571
2010-04-07 19:28:40loewislinkissue8337 superseder
2010-04-07 16:43:52dmalcolmsetfiles: + fix-test_gdb-deprection-warning.patch
keywords: + patch
messages: + msg102546

stage: patch review
2010-04-07 00:45:24dmalcolmcreate