Details
-
Bug
-
Resolution: Done
-
P1: Critical
-
5.4.0
-
Win 7 SP1
-
131fe1b85311b8ab02498cea5d1dda2188dcdabc
Description
I have not reproduced this myself, but my team has received a couple of anonymized crash dumps from end users with this problem. From the stacktrace below and from very brief user notes attached to the crash uploads (one user says what button s/he clicked in the app), I infer that our code is trying to load a .qml component from our embedded qrc via a Loader. The QML engine appears to be asking Windows to normalize the QML component URL, but Windows throws a strange exception. We can't see any way to defend against this problem in our code because this is happening on a background QML engine thread.
Ideas for workarounds:
1) don't normalize paths to qrc: urls
2) put a try/catch around the call to SHParseDisplayName
It occurred to me that this might just be memory corruption, but the fact that we've received two crash reports with the same stacktrace but from different versions of our app suggests to me that this not just an innocent bystander thread.
Unhandled exception at 0x000007FEFE632948 (ole32.dll) in crash.dmp: 0xC0000096: Privileged instruction.
ole32.dll!000007fefe632948() C++ ole32.dll!AddPartitionID(ActivationPropertiesIn * pActIn) Line 198 C++ ole32.dll!ICoCreateInstanceEx(const _GUID & Clsid, IUnknown * punkOuter, unsigned long dwClsCtx, _COSERVERINFO * pServerInfo, unsigned long dwCount, unsigned long dwActvFlags, tagMULTI_QI * pResults, ActivationPropertiesIn * pActIn) Line 1218 C++ ole32.dll!CoCreateInstance(const _GUID & rclsid, IUnknown * pUnkOuter, unsigned long dwContext, const _GUID & riid, void * * ppv) Line 108 C++ shell32.dll!_SHCoCreateInstance(struct _GUID const &,struct IUnknown *,unsigned long,int,enum EXTCOCREATEFLAGS,struct _GUID const &,void * *) Unknown shell32.dll!CRegFolder::_CreateCachedRegFolder(struct IDLREGITEM const *,struct IBindCtx *,struct _GUID const &,void * *) Unknown shell32.dll!CRegFolder::_BindToItem(struct IDLREGITEM const *,struct IBindCtx *,struct _GUID const &,void * *,int) Unknown shell32.dll!CRegFolder::_ParseThroughItem(struct IDLREGITEM const *,struct HWND__ *,struct IBindCtx *,unsigned short *,unsigned long *,struct _ITEMIDLIST_RELATIVE * *,unsigned long *) Unknown shell32.dll!CRegFolder::ParseDisplayName(struct HWND__ *,struct IBindCtx *,unsigned short *,unsigned long *,struct _ITEMIDLIST_RELATIVE * *,unsigned long *) Unknown shell32.dll!SHParseDisplayName() Unknown Qt5Qml.dll!shellNormalizeFileName(const QString & name) Line 2310 C++ Qt5Qml.dll!QQml_isFileCaseCorrect(const QString & fileName, int lengthIn) Line 2340 C++ Qt5Qml.dll!QQmlFile::load(QQmlEngine * engine, const QUrl & url) Line 345 C++ Qt5Qml.dll!QQmlFile::QQmlFile(QQmlEngine * e, const QUrl & url) Line 215 C++