aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValery Volgutov <valery.volgutov@lge.com>2020-07-24 10:24:24 +0300
committerTim Jenssen <tim.jenssen@qt.io>2020-08-11 18:22:24 +0000
commit6382ec9a6c961f2b7d7139659c11a047f6b68b07 (patch)
treecc93bc97a9df5c45be2295d436f4e0825e8549e3
parent121cfa92daf310df382ddf3d1171ae0d94274f14 (diff)
Add clipNext null pointer guard
Sometime clipNext can be null. Added null pointer guard to avoid segfault. Fixes: QTBUG-85996 Change-Id: I3cd4486fefbf9aa71cf0fdb765bb8398c0e2d591 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r--src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp36
1 files changed, 19 insertions, 17 deletions
diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
index 131790b19a..860e63d316 100644
--- a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
+++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
@@ -2484,24 +2484,26 @@ ClipState::ClipType Renderer::updateStencilClip(const QSGClipNode *clip)
m_clipMatrixId = m_clipProgram.uniformLocation("matrix");
}
const QSGClipNode *clipNext = clip->clipList();
- QMatrix4x4 mNext = m_current_projection_matrix;
- if (clipNext->matrix())
- mNext *= *clipNext->matrix();
-
- auto rect = scissorRect(clipNext->clipRect(), mNext);
-
- ClipState::ClipType clipTypeNext = clipType ;
- clipTypeNext |= ClipState::StencilClip;
- QRect m_next_scissor_rect = m_currentScissorRect;
- if (!(clipTypeNext & ClipState::ScissorClip)) {
- m_next_scissor_rect = rect;
- glEnable(GL_SCISSOR_TEST);
- } else {
- m_next_scissor_rect =
- m_currentScissorRect & rect;
+ if (clipNext) {
+ QMatrix4x4 mNext = m_current_projection_matrix;
+ if (clipNext->matrix())
+ mNext *= *clipNext->matrix();
+
+ auto rect = scissorRect(clipNext->clipRect(), mNext);
+
+ ClipState::ClipType clipTypeNext = clipType ;
+ clipTypeNext |= ClipState::StencilClip;
+ QRect m_next_scissor_rect = m_currentScissorRect;
+ if (!(clipTypeNext & ClipState::ScissorClip)) {
+ m_next_scissor_rect = rect;
+ glEnable(GL_SCISSOR_TEST);
+ } else {
+ m_next_scissor_rect =
+ m_currentScissorRect & rect;
+ }
+ glScissor(m_next_scissor_rect.x(), m_next_scissor_rect.y(),
+ m_next_scissor_rect.width(), m_next_scissor_rect.height());
}
- glScissor(m_next_scissor_rect.x(), m_next_scissor_rect.y(),
- m_next_scissor_rect.width(), m_next_scissor_rect.height());
glClearStencil(0);
glClear(GL_STENCIL_BUFFER_BIT);