From 0db91aa56b694a458a5d23687909cab526c473c6 Mon Sep 17 00:00:00 2001 From: Eladash Date: Wed, 29 Apr 2020 06:46:51 +0300 Subject: [PATCH] Fix address_range start_length() constructor Fixes an underflow when constructing start_length(0, 0). --- Utilities/address_range.h | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Utilities/address_range.h b/Utilities/address_range.h index dcccc1a64e..634fbb76e9 100644 --- a/Utilities/address_range.h +++ b/Utilities/address_range.h @@ -60,21 +60,26 @@ namespace utils return (start1 >= start2 && end1 <= end2); } - address_range(u32 _start, u32 _end) : start(_start), end(_end) {} + constexpr address_range(u32 _start, u32 _end) : start(_start), end(_end) {} public: // Constructors - address_range() = default; - address_range(const address_range &other) : start(other.start), end(other.end) {} + constexpr address_range() = default; + constexpr address_range(const address_range &other) : start(other.start), end(other.end) {} - static inline address_range start_length(u32 _start, u32 _length) + static constexpr address_range start_length(u32 _start, u32 _length) { - return address_range(_start, _start + (_length - 1)); + if (!_length) + { + return {}; + } + + return {_start, _start + (_length - 1)}; } - static inline address_range start_end(u32 _start, u32 _end) + static constexpr address_range start_end(u32 _start, u32 _end) { - return address_range(_start, _end); + return {_start, _end}; } // Length