diff options
author | Vladimir Belyavsky <belyavskyv@gmail.com> | 2023-08-10 12:52:01 +0300 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-08-10 14:34:52 +0000 |
commit | e41b9c4d355fa10f473f83a82dc99013801851f2 (patch) | |
tree | 342fc9c7ca1bdd83f1b8f5914e80d39a99910cff | |
parent | 1bffce8df1a8534d742797fa0b4702057de5ab92 (diff) |
EVR: fix potential crash on accessing to NV_DX_Interop extension
Under some circumstances wglGetExtensionsStringARB() may return null
pointer (unfortunately, it's still not clear why exactly this might
happen). As a result we get a crash in a subsequent strstr() call.
So for now we just add a simple null pointer check here to avoid the
crash.
Fixes: QTBUG-109710
Change-Id: Ia77ff7b4490f4b817ddddabfdc14750bd69118d0
Reviewed-by: Jøger Hansegård <joger.hansegard@qt.io>
Reviewed-by: Artem Dyomin <artem.dyomin@qt.io>
(cherry picked from commit 58e0ca625808cb91424d1be05ce3725fb746818f)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp b/src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp index 0548718a8..a6b167882 100644 --- a/src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp +++ b/src/plugins/multimedia/windows/evr/evrd3dpresentengine.cpp @@ -412,7 +412,12 @@ static bool readWglNvDxInteropProc(WglNvDxInterop &f) HWND hwnd = ::GetShellWindow(); auto dc = ::GetDC(hwnd); - bool hasExtension = strstr(wglGetExtensionsStringARB(dc), "WGL_NV_DX_interop"); + + const char *wglExtString = wglGetExtensionsStringARB(dc); + if (!wglExtString) + qCDebug(qLcEvrD3DPresentEngine) << "WGL extensions missing (wglGetExtensionsStringARB returned null)"; + + bool hasExtension = wglExtString && strstr(wglExtString, "WGL_NV_DX_interop"); ReleaseDC(hwnd, dc); if (!hasExtension) { qCDebug(qLcEvrD3DPresentEngine) << "WGL_NV_DX_interop missing"; |