From 2cbdcb03a1a5d4b7a1b64ce85892cf655c3e229b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Mikrut?= Date: Tue, 9 Feb 2021 16:14:50 +0100 Subject: [PATCH] Don't allow to use in bit shift negative operands --- core/variant/variant_op.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/core/variant/variant_op.cpp b/core/variant/variant_op.cpp index e0a3cf4215f..99680539a33 100644 --- a/core/variant/variant_op.cpp +++ b/core/variant/variant_op.cpp @@ -257,6 +257,14 @@ public: static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) { const A &a = *VariantGetInternalPtr::get_ptr(&p_left); const B &b = *VariantGetInternalPtr::get_ptr(&p_right); + +#if defined(DEBUG_ENABLED) + if (b < 0 || a < 0) { + *r_ret = "Invalid operands for bit shifting. Only positive operands are supported."; + r_valid = false; + return; + } +#endif *r_ret = a << b; r_valid = true; } @@ -276,6 +284,14 @@ public: static void evaluate(const Variant &p_left, const Variant &p_right, Variant *r_ret, bool &r_valid) { const A &a = *VariantGetInternalPtr::get_ptr(&p_left); const B &b = *VariantGetInternalPtr::get_ptr(&p_right); + +#if defined(DEBUG_ENABLED) + if (b < 0 || a < 0) { + *r_ret = "Invalid operands for bit shifting. Only positive operands are supported."; + r_valid = false; + return; + } +#endif *r_ret = a >> b; r_valid = true; }