Don't allow division by false (zero)

This fixes #10717
This commit is contained in:
Hein-Pieter van Braam 2017-09-09 01:05:58 +02:00
parent 25f742cc3d
commit 4f16baca43

View file

@ -670,7 +670,34 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a, const Variant &
switch (p_a.type) { switch (p_a.type) {
DEFAULT_OP_FAIL(NIL); DEFAULT_OP_FAIL(NIL);
DEFAULT_OP_NUM(/, BOOL, _bool); case BOOL: {
switch (p_b.type) {
case BOOL: {
int64_t b = p_b._data._bool;
if (b == 0) {
r_valid = false;
_RETURN("Division By False");
}
_RETURN(p_a._data._bool / b);
} break;
case INT: {
int64_t b = p_b._data._int;
if (b == 0) {
r_valid = false;
_RETURN("Division By Zero");
}
_RETURN(p_a._data._bool / b);
} break;
case REAL: _RETURN(p_a._data._bool / p_b._data._real);
default: {}
}
r_valid = false;
return;
};
case INT: { case INT: {
switch (p_b.type) { switch (p_b.type) {
case BOOL: { case BOOL: {