diff options
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2018-12-13 14:03:32 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2019-01-03 18:50:54 +0000
commite254c3c2aa140016e298107a0297885234abfde7 (patch)
treedb15ce3a6329ec3cc87a1b53f91e62ce754aeadc /LICENSE.GPLv3-EXCEPT
parent0b352fca7391d01ce410ec0c04c285326e465dc1 (diff)
Fix crash related to multiple inheritance
In the <class>_PTR_CppToPython_<class> converter function (written by CppGenerator::writeConverterFunctions()), the generated code used typeid(*ptr).name() to retrieve the name to use for the SbkObjectTypes. This construct returns the name of the outermost class (for example, "QWidget" for a QWidget-type paint device returned by QPainter::device()), as opposed to "QPaintDevice *" returned by typeid(ptr).name(). This caused a crash with multiple inheritance since QWidget inherits QObject and QPaintDevice and the "QWidget" type was associated with the QPaintDevice pointer. To fix this: - Add API to libshiboken to obtain the SbkObjectType* by name and check for the presence of a special cast function (multiple inheritance). - Generate the code of <class>_PTR_CppToPython_<class> as follows: Check whether the outermost type obtained by typeid(*ptr).name() has a special cast function. If that is the case, use the type name obtained by typeid(ptr).name() (base class) to create the wrapper. Change-Id: I8ee6b4c084e9dafa434623433661809b83aedee5 Fixes: PYSIDE-868 Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'LICENSE.GPLv3-EXCEPT')
0 files changed, 0 insertions, 0 deletions