summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVladimir Belyavsky <belyavskyv@gmail.com>2023-08-10 12:52:01 +0300
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-08-10 14:34:52 +0000
commite41b9c4d355fa10f473f83a82dc99013801851f2 (patch)
tree342fc9c7ca1bdd83f1b8f5914e80d39a99910cff
parent1bffce8df1a8534d742797fa0b4702057de5ab92 (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.cpp7
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";