summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjsjtxietian <jsjtxietian@outlook.com>2023-11-13 16:19:17 +0800
committerjsjtxietian <jsjtxietian@outlook.com>2023-11-13 18:01:14 +0800
commit306a8eec586656fd41e905f73da33a9a0409e56c (patch)
tree27974ad9736cf6125f8e81e8d7458fc31d39bd92
parent64150060f89677eaf11229813ae6c5cf8a873802 (diff)
downloadredot-engine-306a8eec586656fd41e905f73da33a9a0409e56c.tar.gz
Add protection in RichTextLabel.update_image to prevent crash
-rw-r--r--scene/gui/rich_text_label.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/scene/gui/rich_text_label.cpp b/scene/gui/rich_text_label.cpp
index 30a468dfc5..dd93376a2d 100644
--- a/scene/gui/rich_text_label.cpp
+++ b/scene/gui/rich_text_label.cpp
@@ -3207,6 +3207,9 @@ void RichTextLabel::add_image(const Ref<Texture2D> &p_image, int p_width, int p_
ERR_FAIL_COND(p_image.is_null());
ERR_FAIL_COND(p_image->get_width() == 0);
ERR_FAIL_COND(p_image->get_height() == 0);
+ ERR_FAIL_COND(p_width < 0);
+ ERR_FAIL_COND(p_height < 0);
+
ItemImage *item = memnew(ItemImage);
if (p_region.has_area()) {
@@ -3240,6 +3243,9 @@ void RichTextLabel::update_image(const Variant &p_key, BitField<ImageUpdateMask>
ERR_FAIL_COND(p_image->get_height() == 0);
}
+ ERR_FAIL_COND(p_width < 0);
+ ERR_FAIL_COND(p_height < 0);
+
bool reshape = false;
Item *it = main;
@@ -3291,6 +3297,9 @@ void RichTextLabel::update_image(const Variant &p_key, BitField<ImageUpdateMask>
}
}
if ((p_mask & UPDATE_SIZE) || (p_mask & UPDATE_REGION) || (p_mask & UPDATE_TEXTURE)) {
+ ERR_FAIL_COND(item->image.is_null());
+ ERR_FAIL_COND(item->image->get_width() == 0);
+ ERR_FAIL_COND(item->image->get_height() == 0);
Size2 new_size = _get_image_size(item->image, item->rq_size.width, item->rq_size.height, item->region);
if (item->size != new_size) {
reshape = true;