From 89a950fdbfc420febc5c8fb28dce0ffe3135b356 Mon Sep 17 00:00:00 2001 From: Arthur Laureus Wigo <126365160+arthurlw@users.noreply.github.com> Date: Wed, 26 Feb 2025 10:16:36 -0800 Subject: [PATCH 1/2] added error handling for array get method --- core/variant/array.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/variant/array.cpp b/core/variant/array.cpp index d91612b420ca..ea356ee7203b 100644 --- a/core/variant/array.cpp +++ b/core/variant/array.cpp @@ -96,6 +96,7 @@ Array::ConstIterator Array::end() const { } Variant &Array::operator[](int p_idx) { + ERR_FAIL_INDEX_MSG(p_idx, size(), _p->array[0]); if (unlikely(_p->read_only)) { *_p->read_only = _p->array[p_idx]; return *_p->read_only; @@ -104,6 +105,7 @@ Variant &Array::operator[](int p_idx) { } const Variant &Array::operator[](int p_idx) const { + ERR_FAIL_INDEX_MSG(p_idx, size(), _p->array[0]); if (unlikely(_p->read_only)) { *_p->read_only = _p->array[p_idx]; return *_p->read_only; @@ -493,6 +495,7 @@ void Array::set(int p_idx, const Variant &p_value) { } const Variant &Array::get(int p_idx) const { + ERR_FAIL_INDEX_MSG(p_idx, size(), Variant()); return operator[](p_idx); } From b7a0c00fdc4297a216717ba1efbf4121cf60d803 Mon Sep 17 00:00:00 2001 From: Arthur Laureus Wigo <126365160+arthurlw@users.noreply.github.com> Date: Wed, 26 Feb 2025 13:22:31 -0800 Subject: [PATCH 2/2] update operator[] and get method return types --- core/variant/array.cpp | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/core/variant/array.cpp b/core/variant/array.cpp index ea356ee7203b..6faca62d3eab 100644 --- a/core/variant/array.cpp +++ b/core/variant/array.cpp @@ -95,22 +95,22 @@ Array::ConstIterator Array::end() const { return ConstIterator(_p->array.ptr() + _p->array.size(), _p->read_only); } -Variant &Array::operator[](int p_idx) { - ERR_FAIL_INDEX_MSG(p_idx, size(), _p->array[0]); - if (unlikely(_p->read_only)) { - *_p->read_only = _p->array[p_idx]; - return *_p->read_only; - } - return _p->array.write[p_idx]; +Variant Array::operator[](int p_idx) { + ERR_FAIL_INDEX_V_MSG(p_idx < 0 || p_idx >= size(), Variant()); + if (unlikely(_p->read_only)) { + *_p->read_only = _p->array[p_idx]; + return *_p->read_only; + } + return _p->array[p_idx]; } -const Variant &Array::operator[](int p_idx) const { - ERR_FAIL_INDEX_MSG(p_idx, size(), _p->array[0]); - if (unlikely(_p->read_only)) { - *_p->read_only = _p->array[p_idx]; - return *_p->read_only; - } - return _p->array[p_idx]; +const Variant Array::operator[](int p_idx) const { + ERR_FAIL_INDEX_V_MSG(p_idx < 0 || p_idx >= size(), Variant()); + if (unlikely(_p->read_only)) { + *_p->read_only = _p->array[p_idx]; + return *_p->read_only; + } + return _p->array[p_idx]; } int Array::size() const { @@ -494,9 +494,9 @@ void Array::set(int p_idx, const Variant &p_value) { operator[](p_idx) = value; } -const Variant &Array::get(int p_idx) const { - ERR_FAIL_INDEX_MSG(p_idx, size(), Variant()); - return operator[](p_idx); +Variant Array::get(int p_idx) const { + ERR_FAIL_INDEX_V_MSG(p_idx < 0 || p_idx >= size(), Variant()); + return operator[](p_idx); } Array Array::duplicate(bool p_deep) const {