diff --git a/src/json.hpp b/src/json.hpp index 65ced7305..80b67710a 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -757,7 +757,7 @@ class basic_json /// assignment type_data_t& operator=(value_t rhs) { - bits.type = static_cast(rhs); + bits.type = static_cast(rhs) & 15; // avoid overflow return *this; } @@ -765,7 +765,7 @@ class basic_json type_data_t(value_t t) noexcept { *reinterpret_cast(this) = 0; - bits.type = static_cast(t); + bits.type = static_cast(t) & 15; // avoid overflow } /// default constructor @@ -6082,7 +6082,7 @@ class basic_json { return (v < 10) ? ('0' + static_cast(v)) - : ('a' + static_cast(v - 10)); + : ('a' + static_cast((v - 10) & 0xff)); }; // print character c as \uxxxx diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 0aa8321e5..1c80915b0 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -757,7 +757,7 @@ class basic_json /// assignment type_data_t& operator=(value_t rhs) { - bits.type = static_cast(rhs); + bits.type = static_cast(rhs) & 15; // avoid overflow return *this; } @@ -765,7 +765,7 @@ class basic_json type_data_t(value_t t) noexcept { *reinterpret_cast(this) = 0; - bits.type = static_cast(t); + bits.type = static_cast(t) & 15; // avoid overflow } /// default constructor @@ -6082,7 +6082,7 @@ class basic_json { return (v < 10) ? ('0' + static_cast(v)) - : ('a' + static_cast(v - 10)); + : ('a' + static_cast((v - 10) & 0xff)); }; // print character c as \uxxxx