summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2015-01-02 13:17:46 -0300
committerJuan Linietsky <reduzio@gmail.com>2015-01-02 13:17:46 -0300
commit28daf19744423b989e0e2f04895554e3918b5920 (patch)
tree67b8f30067db87ae9ac91637b8f5c559f7ac1132 /core
parent2e08e111205b3ffc7fc28f0cb80e857dd4bc9640 (diff)
-assignment of ord to string index made valid #1072
Diffstat (limited to 'core')
-rw-r--r--core/variant_op.cpp32
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: {