diff options
author | Juan Linietsky <reduzio@gmail.com> | 2015-01-02 13:17:46 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2015-01-02 13:17:46 -0300 |
commit | 28daf19744423b989e0e2f04895554e3918b5920 (patch) | |
tree | 67b8f30067db87ae9ac91637b8f5c559f7ac1132 /core | |
parent | 2e08e111205b3ffc7fc28f0cb80e857dd4bc9640 (diff) |
-assignment of ord to string index made valid #1072
Diffstat (limited to 'core')
-rw-r--r-- | core/variant_op.cpp | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/core/variant_op.cpp b/core/variant_op.cpp index 9c489c5ef2..d9fe6537a1 100644 --- a/core/variant_op.cpp +++ b/core/variant_op.cpp @@ -922,21 +922,31 @@ void Variant::set(const Variant& p_index, const Variant& p_value, bool *r_valid) case REAL: { return; } break; case STRING: { - if (p_value.type!=Variant::STRING) + + if (p_index.type!=Variant::INT && p_index.type!=Variant::REAL) return; - if (p_index.get_type()==Variant::INT || p_index.get_type()==Variant::REAL) { - //string index - int idx=p_index; - String *str=reinterpret_cast<String*>(_data._mem); - if (idx >=0 && idx<str->length()) { - String chr = p_value; - *str = str->substr(0,idx-1)+chr+str->substr(idx+1,str->length()); - valid=true; - return; - } + int idx=p_index; + String *str=reinterpret_cast<String*>(_data._mem); + if (idx <0 || idx>=str->length()) + return; + + String chr; + if (p_value.type==Variant::INT || p_value.type==Variant::REAL) { + + chr = String::chr(p_value); + } else if (p_value.type==Variant::STRING) { + + chr = p_value; + } else { + return; } + *str = str->substr(0,idx-1)+chr+str->substr(idx+1,str->length()); + valid=true; + return; + + } break; case VECTOR2: { |