[PyQt] Segmentation faults

Luke Campagnola lcampagn at email.unc.edu
Thu Aug 5 08:10:50 BST 2010


I believe I have run into a class of bugs in PyQt4. I originally found that
QSpinBox.lineEdit() returns a QLineEdit instance which does not maintain its
reference count properly after the original QSpinBox is deleted. Thus it is
possible to either 1) have uncollectable LineEdits lingering in memory, or
2) crash the program by accessing the LineEdit (see example below).

The same bug also applies to:
 - QAbstractSpinBox.lineEdit
 - QComboBox.lineEdit,
 - QAbstractScrollArea.horizontalScrollBar
 - QAbstractScrollArea.verticalScrollBar
 - QTreeView.header
 - QSplitter.handle

.. and likely many others. In the best case, this bug causes minor memory
leaks that few people are likely to notice. In the worst case, it causes
crashes which are very difficult to debug if you don't have easy access to
debugging symbols (ie using windows binaries).

$ python
>>> from PyQt4.QtGui import *
>>> a = QApplication([])
>>> s = QSpinBox()
>>> l = s.lineEdit()
>>> del s
>>> l.text()
Segmentation fault
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20100805/d9dd2319/attachment.html>


More information about the PyQt mailing list