Add assertions for CScriptNum[10] +/- int64_t to avoid the possibility of UB.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
This commit is contained in:
parent
9ba10a8071
commit
f432fe5ebf
|
@ -242,8 +242,20 @@ public:
|
|||
inline bool operator>=(const CScriptNum& rhs) const { return operator>=(rhs.m_value); }
|
||||
inline bool operator> (const CScriptNum& rhs) const { return operator> (rhs.m_value); }
|
||||
|
||||
inline CScriptNum operator+( const int64_t& rhs) const { return CScriptNum(m_value + rhs);}
|
||||
inline CScriptNum operator-( const int64_t& rhs) const { return CScriptNum(m_value - rhs);}
|
||||
inline CScriptNum operator+( const int64_t& rhs) const
|
||||
{
|
||||
assert(rhs == 0 || (rhs > 0 && m_value <= std::numeric_limits<int64_t>::max() - rhs) ||
|
||||
(rhs < 0 && m_value >= std::numeric_limits<int64_t>::min() - rhs));
|
||||
return CScriptNum(m_value + rhs);
|
||||
}
|
||||
|
||||
inline CScriptNum operator-( const int64_t& rhs) const
|
||||
{
|
||||
assert(rhs == 0 || (rhs > 0 && m_value >= std::numeric_limits<int64_t>::min() + rhs) ||
|
||||
(rhs < 0 && m_value <= std::numeric_limits<int64_t>::max() + rhs));
|
||||
return CScriptNum(m_value - rhs);
|
||||
}
|
||||
|
||||
inline CScriptNum operator+( const CScriptNum& rhs) const { return operator+(rhs.m_value); }
|
||||
inline CScriptNum operator-( const CScriptNum& rhs) const { return operator-(rhs.m_value); }
|
||||
|
||||
|
|
|
@ -75,8 +75,20 @@ public:
|
|||
inline bool operator>=(const CScriptNum10& rhs) const { return operator>=(rhs.m_value); }
|
||||
inline bool operator> (const CScriptNum10& rhs) const { return operator> (rhs.m_value); }
|
||||
|
||||
inline CScriptNum10 operator+( const int64_t& rhs) const { return CScriptNum10(m_value + rhs);}
|
||||
inline CScriptNum10 operator-( const int64_t& rhs) const { return CScriptNum10(m_value - rhs);}
|
||||
inline CScriptNum10 operator+( const int64_t& rhs) const
|
||||
{
|
||||
assert(rhs == 0 || (rhs > 0 && m_value <= std::numeric_limits<int64_t>::max() - rhs) ||
|
||||
(rhs < 0 && m_value >= std::numeric_limits<int64_t>::min() - rhs));
|
||||
return CScriptNum10(m_value + rhs);
|
||||
}
|
||||
|
||||
inline CScriptNum10 operator-( const int64_t& rhs) const
|
||||
{
|
||||
assert(rhs == 0 || (rhs > 0 && m_value >= std::numeric_limits<int64_t>::min() + rhs) ||
|
||||
(rhs < 0 && m_value <= std::numeric_limits<int64_t>::max() + rhs));
|
||||
return CScriptNum10(m_value - rhs);
|
||||
}
|
||||
|
||||
inline CScriptNum10 operator+( const CScriptNum10& rhs) const { return operator+(rhs.m_value); }
|
||||
inline CScriptNum10 operator-( const CScriptNum10& rhs) const { return operator-(rhs.m_value); }
|
||||
|
||||
|
|
Loading…
Reference in New Issue