Correctly halt on error in sprintf parsing (fixes #1393)

This commit is contained in:
Bil Bas (Spooner)
2015-02-19 15:45:49 +00:00
parent e3bf8ab02d
commit db2381de7a
5 changed files with 101 additions and 110 deletions

View File

@@ -738,18 +738,22 @@ void Variant::evaluate(const Operator& p_op, const Variant& p_a, const Variant&
_RETURN( p_a._data._int % p_b._data._int );
} else if (p_a.type==STRING) {
const String *str=reinterpret_cast<const String*>(p_a._data._mem);
const String* format=reinterpret_cast<const String*>(p_a._data._mem);
String result;
bool error;
if (p_b.type==ARRAY) {
// e.g. "frog %s %d" % ["fish", 12]
const Array *arr=reinterpret_cast<const Array*>(p_b._data._mem);
_RETURN(str->sprintf(*arr));
const Array* args=reinterpret_cast<const Array*>(p_b._data._mem);
result=format->sprintf(*args, &error);
} else {
// e.g. "frog %d" % 12
Array arr;
arr.push_back(p_b);
_RETURN(str->sprintf(arr));
Array args;
args.push_back(p_b);
result=format->sprintf(args, &error);
}
r_valid = !error;
_RETURN(result);
}
r_valid=false;