summaryrefslogtreecommitdiff
path: root/core/variant/variant_setget.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <remi@verschelde.fr>2022-05-17 21:16:25 +0200
committerGitHub <noreply@github.com>2022-05-17 21:16:25 +0200
commitf87e5c481d02f6b3000cd09c17444db93d12be2c (patch)
tree348ee39d1d0960830c045338cea6adb1096c89a4 /core/variant/variant_setget.cpp
parent4ee530e6ac7909ed45bd170e9535a17a41b51b67 (diff)
parent023b1d7f5a60b5833f7e2030fade6cc1cff54eba (diff)
Merge pull request #61127 from vnen/read-only-array
Implement read-only arrays
Diffstat (limited to 'core/variant/variant_setget.cpp')
-rw-r--r--core/variant/variant_setget.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/core/variant/variant_setget.cpp b/core/variant/variant_setget.cpp
index 6514922d01..3839da495f 100644
--- a/core/variant/variant_setget.cpp
+++ b/core/variant/variant_setget.cpp
@@ -624,6 +624,11 @@ struct VariantIndexedSetGet_Array {
PtrToArg<Variant>::encode(v[index], member);
}
static void set(Variant *base, int64_t index, const Variant *value, bool *valid, bool *oob) {
+ if (VariantGetInternalPtr<Array>::get_ptr(base)->is_read_only()) {
+ *valid = false;
+ *oob = true;
+ return;
+ }
int64_t size = VariantGetInternalPtr<Array>::get_ptr(base)->size();
if (index < 0) {
index += size;
@@ -638,6 +643,10 @@ struct VariantIndexedSetGet_Array {
*valid = true;
}
static void validated_set(Variant *base, int64_t index, const Variant *value, bool *oob) {
+ if (VariantGetInternalPtr<Array>::get_ptr(base)->is_read_only()) {
+ *oob = true;
+ return;
+ }
int64_t size = VariantGetInternalPtr<Array>::get_ptr(base)->size();
if (index < 0) {
index += size;