From 28daf19744423b989e0e2f04895554e3918b5920 Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Fri, 2 Jan 2015 13:17:46 -0300 Subject: [PATCH] -assignment of ord to string index made valid #1072 --- core/variant_op.cpp | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/core/variant_op.cpp b/core/variant_op.cpp index 9c489c5ef2e..d9fe6537a19 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) - return; - if (p_index.get_type()==Variant::INT || p_index.get_type()==Variant::REAL) { - //string index - int idx=p_index; - String *str=reinterpret_cast(_data._mem); - if (idx >=0 && idxlength()) { - String chr = p_value; - *str = str->substr(0,idx-1)+chr+str->substr(idx+1,str->length()); - valid=true; - return; - } + if (p_index.type!=Variant::INT && p_index.type!=Variant::REAL) + return; + + int idx=p_index; + String *str=reinterpret_cast(_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: {