Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-46248

crash under shellNormalizeFileName due to privileged instruction

    XMLWordPrintable

Details

    • 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++
      

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            andysh Andy Shaw
            chrisdolan Chris Dolan
            Votes:
            0 Vote for this issue
            Watchers:
            7 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes