help understanding a Windows crash report

Thiago Macieira thiago at macieira.org
Wed Oct 29 18:50:01 PDT 2014


On Wednesday 29 October 2014 15:07:35 Dirk Hohndel wrote:
> I have no debug symbols. Thiago is looking into this and he came to the
> conclusion that this might be a Qt 5.3.2 bug. The previous Fedora version
> was 5.3.1 - but I can't get those RPMs anymore.

I'm fairly certain it's not a Qt bug now. This is a binary incompatibility 
issue between QtGui and QtWidgets due either a bug in Dirk's packaging or in 
Fedora's packaging.

Dirk: verify that the DLLs you gave me are exactly the ones that Fedora 
shipped. If they are, the bug is in Fedora's build, somehow. It looks like a 
stale Qt5Gui.dll got packaged instead of the right one.

Explanation:

The backtrace that I managed to obtain with Dirk made little sense, but after 
realising that the debugger wasn't picking up the names of unexported 
functions, I reconstructed the following backtrace:

#3 QPlatformFontDatabase::resolveFontFamilyAlias(const QString &) const
#4 QFontComboBoxPrivate::_q_updateModel()
[not shown] QFontComboBox::setWritingSystem(QFontDatabase::WritingSystem)
#5 QFontComboBox::QFontComboBox(QWidget *)

If you look at _q_updateModel, you'll see that it does not call 
resolveFontFamilyAlias. But by comparing the assembly with the source code, 
the crash point is on line:

        if (pfdb->isPrivateFontFamily(list.at(i)))

pfdb is a QPlatformFontDatabase.

Here's how I know it's a BIC issue: both resolveFontFamilyAlias and 
isPrivateFontFamily are virtual functions and isPrivateFontFamily was added 
between Qt 5.3.1 and 5.3.2, inserted just before resolveFontFamilyAlias. That 
means the caller in QtWidget placed a call to the correct virtual slot, but 
the QPlatformFontDatabase's virtual table in QtGui contained the old function 
at that position.

This problem cannot happen in a clean build. The only way for this to happen 
is if Fedora rebuilt without cleaning up the .o files or if they accidentally 
packaged a pre-release Qt5Gui.dll.

-- 
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
   Software Architect - Intel Open Source Technology Center
      PGP/GPG: 0x6EF45358; fingerprint:
      E067 918B B660 DBD1 105C  966C 33F5 F005 6EF4 5358



More information about the subsurface mailing list