[PyQt] Segfault on exceptions in QNetworkAccessManager::createRequest

Phil Thompson phil at riverbankcomputing.com
Thu Sep 25 16:57:14 BST 2014


On 25/09/2014 10:13 am, Florian Bruhin wrote:
> * Phil Thompson <phil at riverbankcomputing.com> [2014-09-22 18:03:54 
> +0100]:
>> On 16/09/2014 7:00 pm, Florian Bruhin wrote:
>> >I noticed I get a segfault when there's an exception in
>> >QNetworkAccessManager::createRequest.
>> >
>> >Is this a bug in PyQt? Or is it just a tricky situation maybe (wild
>> >guesses following) because the code there is running in another
>> >thread, and Qt expects to get a proper QNetworkRequest?
>> >
>> >An example script is attached.
>> 
>> I think it's just that Qt expects a QNetworkRequest and doesn't handle 
>> a
>> NULL pointer.
> 
> So PyQt returns NULL when an exception happens inside a Qt method, is
> that correct?
> 
> I noticed when I returns an invalid return type (like False), I get
> PyQt's TypeError as an exception without any segfault. What happens on
> a C++ level there? Maybe other exceptions in there should be handled
> the same way?

The value returned depends on the C++ return type. In this case, where a 
pointer is expected, the value is NULL.

The way to handle this might be to add a new annotation /NotNone/ that 
says that NULL should not be returned to C++, or another annotation 
might specify the default value that is returned when an exception is 
raised. However in either case you won't be telling C++ that there is a 
problem and it will carry on regardless - maybe a crash is the best 
thing to do in this circumstance.

Phil


More information about the PyQt mailing list