From 378ca68dc1164e1d9fef8873d644242fff58538c Mon Sep 17 00:00:00 2001 From: Sean Kim Date: Thu, 21 Oct 2021 19:36:02 -0700 Subject: [PATCH] Fix potential nullptr dereference in CanvasLayer * Changed another instance of ERR_FAIL_COND in the same file to ERR_FAIL_NULL_MSG instead. * Checked for potential access of the viewport pointer elsewhere in same file. Fixes #54098 (cherry picked from commit 497b00a93705c30148601bfe6cb8a0915e0cad5d) --- scene/main/canvas_layer.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scene/main/canvas_layer.cpp b/scene/main/canvas_layer.cpp index 5a5064d3030..b0c4a6d73cd 100644 --- a/scene/main/canvas_layer.cpp +++ b/scene/main/canvas_layer.cpp @@ -136,7 +136,7 @@ void CanvasLayer::_notification(int p_what) { } else { vp = Node::get_viewport(); } - ERR_FAIL_COND(!vp); + ERR_FAIL_NULL_MSG(vp, "Viewport is not initialized."); vp->_canvas_layer_add(this); viewport = vp->get_viewport_rid(); @@ -148,6 +148,8 @@ void CanvasLayer::_notification(int p_what) { } break; case NOTIFICATION_EXIT_TREE: { + ERR_FAIL_NULL_MSG(vp, "Viewport is not initialized."); + vp->_canvas_layer_remove(this); VisualServer::get_singleton()->viewport_remove_canvas(viewport, canvas); viewport = RID(); @@ -168,6 +170,8 @@ Size2 CanvasLayer::get_viewport_size() const { return Size2(1, 1); } + ERR_FAIL_NULL_V_MSG(vp, Size2(1, 1), "Viewport is not initialized."); + Rect2 r = vp->get_visible_rect(); return r.size; } @@ -177,7 +181,7 @@ RID CanvasLayer::get_viewport() const { } void CanvasLayer::set_custom_viewport(Node *p_viewport) { - ERR_FAIL_NULL(p_viewport); + ERR_FAIL_NULL_MSG(p_viewport, "Cannot set viewport to nullptr."); if (is_inside_tree()) { vp->_canvas_layer_remove(this); VisualServer::get_singleton()->viewport_remove_canvas(viewport, canvas);