diff options
| author | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2022-02-15 11:05:34 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-15 11:05:34 +0100 |
| commit | fdeed6ea061891838cf9b464570141bbf28fc4a0 (patch) | |
| tree | 099c0e63c2d96a555df5bec9cdc09f3770c2ecf3 /core/io/marshalls.cpp | |
| parent | 5a6da0b2a94a55798e8f79aefae379df7cab9e3e (diff) | |
| parent | 6aede992a9db749d6e420b645416d9a6f5fe356b (diff) | |
| download | redot-engine-fdeed6ea061891838cf9b464570141bbf28fc4a0.tar.gz | |
Merge pull request #58111 from maksloboda/decoding-master-fix
Fixed variant decoding Segmentation Fault
Diffstat (limited to 'core/io/marshalls.cpp')
| -rw-r--r-- | core/io/marshalls.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/core/io/marshalls.cpp b/core/io/marshalls.cpp index a363cc3694..5c39b2fa1b 100644 --- a/core/io/marshalls.cpp +++ b/core/io/marshalls.cpp @@ -94,7 +94,8 @@ static Error _decode_string(const uint8_t *&buf, int &len, int *r_len, String &r return OK; } -Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int *r_len, bool p_allow_objects) { +Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int *r_len, bool p_allow_objects, int p_depth) { + ERR_FAIL_COND_V_MSG(p_depth > Variant::MAX_RECURSION_DEPTH, ERR_OUT_OF_MEMORY, "Variant is too deep. Bailing."); const uint8_t *buf = p_buffer; int len = p_len; @@ -585,7 +586,7 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int Variant value; int used; - err = decode_variant(value, buf, len, &used, p_allow_objects); + err = decode_variant(value, buf, len, &used, p_allow_objects, p_depth + 1); if (err) { return err; } @@ -635,7 +636,7 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int Variant key, value; int used; - Error err = decode_variant(key, buf, len, &used, p_allow_objects); + Error err = decode_variant(key, buf, len, &used, p_allow_objects, p_depth + 1); ERR_FAIL_COND_V_MSG(err != OK, err, "Error when trying to decode Variant."); buf += used; @@ -644,7 +645,7 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int (*r_len) += used; } - err = decode_variant(value, buf, len, &used, p_allow_objects); + err = decode_variant(value, buf, len, &used, p_allow_objects, p_depth + 1); ERR_FAIL_COND_V_MSG(err != OK, err, "Error when trying to decode Variant."); buf += used; @@ -677,7 +678,7 @@ Error decode_variant(Variant &r_variant, const uint8_t *p_buffer, int p_len, int for (int i = 0; i < count; i++) { int used = 0; Variant v; - Error err = decode_variant(v, buf, len, &used, p_allow_objects); + Error err = decode_variant(v, buf, len, &used, p_allow_objects, p_depth + 1); ERR_FAIL_COND_V_MSG(err != OK, err, "Error when trying to decode Variant."); buf += used; len -= used; |
