mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-08 10:31:50 -05:00
script: prevent UB when computing abs value for num opcode serialize
This commit is contained in:
parent
1b151e3ffc
commit
2748e87932
3 changed files with 3 additions and 11 deletions
|
@ -329,7 +329,7 @@ public:
|
||||||
|
|
||||||
std::vector<unsigned char> result;
|
std::vector<unsigned char> result;
|
||||||
const bool neg = value < 0;
|
const bool neg = value < 0;
|
||||||
uint64_t absvalue = neg ? -value : value;
|
uint64_t absvalue = neg ? ~static_cast<uint64_t>(value) + 1 : static_cast<uint64_t>(value);
|
||||||
|
|
||||||
while(absvalue)
|
while(absvalue)
|
||||||
{
|
{
|
||||||
|
|
|
@ -135,11 +135,7 @@ void test_one_input(const std::vector<uint8_t>& buffer)
|
||||||
|
|
||||||
const CScriptNum script_num{i64};
|
const CScriptNum script_num{i64};
|
||||||
(void)script_num.getint();
|
(void)script_num.getint();
|
||||||
// Avoid negation failure:
|
(void)script_num.getvch();
|
||||||
// script/script.h:332:35: runtime error: negation of -9223372036854775808 cannot be represented in type 'int64_t' (aka 'long'); cast to an unsigned type to negate this value to itself
|
|
||||||
if (script_num != CScriptNum{std::numeric_limits<int64_t>::min()}) {
|
|
||||||
(void)script_num.getvch();
|
|
||||||
}
|
|
||||||
|
|
||||||
const arith_uint256 au256 = UintToArith256(u256);
|
const arith_uint256 au256 = UintToArith256(u256);
|
||||||
assert(ArithToUint256(au256) == u256);
|
assert(ArithToUint256(au256) == u256);
|
||||||
|
|
|
@ -129,10 +129,6 @@ void test_one_input(const std::vector<uint8_t>& buffer)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
(void)script_num.getint();
|
(void)script_num.getint();
|
||||||
// Avoid negation failure:
|
(void)script_num.getvch();
|
||||||
// script/script.h:332:35: runtime error: negation of -9223372036854775808 cannot be represented in type 'int64_t' (aka 'long'); cast to an unsigned type to negate this value to itself
|
|
||||||
if (script_num != CScriptNum{std::numeric_limits<int64_t>::min()}) {
|
|
||||||
(void)script_num.getvch();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue