[PyQt] SEGV in QTextStream.atEnd on Mac OS
Phil Thompson
phil at riverbankcomputing.com
Tue Aug 30 13:56:04 BST 2011
On Mon, 29 Aug 2011 11:32:01 -0700, David Cortesi <davecortesi at gmail.com>
wrote:
> The following code will reliably produce a crash on my Mac OS 10.6.8
(snow
> leopard) system. Python 2.6.1.
>
> from __future__ import division
> from __future__ import print_function
> from __future__ import unicode_literals
> from future_builtins import *
>
> from PyQt4.QtCore import (QFile, QTextStream, QString)
>
> ts = QTextStream(QString(u"hello\n sailor\n"),QFile.ReadOnly)
> print(ts.atEnd())
> qs = ts.readAll()
> print(u'a. {0}:{1}'.format(qs.length(),qs))
> print(ts.atEnd())
> ts = QTextStream(QString(u"hello\n sailor\n"),QFile.ReadOnly)
> print(ts.atEnd())
>
> The printed output preceding the crash is usually,
> False
> a. 0:
> True
> But sometimes the displayed data is longer and contains garbage
characters.
>
> The crash report starts,
> Exception Type: EXC_BAD_ACCESS (SIGSEGV)
> Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000011
> Crashed Thread: 0 Dispatch queue: com.apple.main-thread
>
> Thread 0 Crashed: Dispatch queue: com.apple.main-thread
> 0 QtCore 0x000000010149d744
> QTextStream::atEnd() const + 20
> 1 QtCore.so 0x000000010113d194
> meth_QTextStream_atEnd + 100
> 2 org.python.python 0x0000000100089187
PyEval_EvalFrameEx
> + 15317
You need to keep a reference to the QString to make sure it doesn't get
garbage collected.
Phil
More information about the PyQt
mailing list