From 6382ec9a6c961f2b7d7139659c11a047f6b68b07 Mon Sep 17 00:00:00 2001 From: Valery Volgutov Date: Fri, 24 Jul 2020 10:24:24 +0300 Subject: 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 --- src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp | 36 ++++++++++++----------- 1 file 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); -- cgit v1.2.3