summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2019-12-13 09:47:43 +0100
committerGitHub <noreply@github.com>2019-12-13 09:47:43 +0100
commitd31ff039ed23e84ee09f8e760506b7169bc0deb6 (patch)
treec2fdb0e6bc7af3beab726d9b360c956acc7e2cda
parent2d69c20d2a1bd25168ec0ba13421fe7b50d1d793 (diff)
parent162a64efcd3cd95035e7dce3403452fd4dfdbd9a (diff)
Merge pull request #34310 from qarmin/shift_operators
Don't allow to use too big or too small shift count
-rw-r--r--core/variant_op.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/core/variant_op.cpp b/core/variant_op.cpp
index ea9e29e744..ae47397558 100644
--- a/core/variant_op.cpp
+++ b/core/variant_op.cpp
@@ -1118,6 +1118,8 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a,
CASE_TYPE(math, OP_SHIFT_LEFT, INT) {
if (p_b.type != INT)
_RETURN_FAIL;
+ if (p_b._data._int < 0 || p_b._data._int >= 64)
+ _RETURN_FAIL;
_RETURN(p_a._data._int << p_b._data._int);
}
@@ -1129,6 +1131,8 @@ void Variant::evaluate(const Operator &p_op, const Variant &p_a,
CASE_TYPE(math, OP_SHIFT_RIGHT, INT) {
if (p_b.type != INT)
_RETURN_FAIL;
+ if (p_b._data._int < 0 || p_b._data._int >= 64)
+ _RETURN_FAIL;
_RETURN(p_a._data._int >> p_b._data._int);
}