Exception instead of assigning 0 in case of wrong vector length
This commit is contained in:
parent
eb2cbd754d
commit
4d480c8a3f
2 changed files with 15 additions and 10 deletions
|
@ -160,11 +160,11 @@ BOOST_AUTO_TEST_CASE( basics ) // constructors, equality, inequality
|
||||||
tmpS = ~R2S; BOOST_CHECK(tmpS == ~R2S);
|
tmpS = ~R2S; BOOST_CHECK(tmpS == ~R2S);
|
||||||
tmpS = ~MaxS; BOOST_CHECK(tmpS == ~MaxS);
|
tmpS = ~MaxS; BOOST_CHECK(tmpS == ~MaxS);
|
||||||
|
|
||||||
// Wrong length must give 0
|
// Wrong length must throw exception.
|
||||||
BOOST_CHECK(uint256(std::vector<unsigned char>(OneArray,OneArray+31)) == 0);
|
BOOST_CHECK_THROW(uint256(std::vector<unsigned char>(OneArray,OneArray+31)), uint_error);
|
||||||
BOOST_CHECK(uint256(std::vector<unsigned char>(OneArray,OneArray+20)) == 0);
|
BOOST_CHECK_THROW(uint256(std::vector<unsigned char>(OneArray,OneArray+20)), uint_error);
|
||||||
BOOST_CHECK(uint160(std::vector<unsigned char>(OneArray,OneArray+32)) == 0);
|
BOOST_CHECK_THROW(uint160(std::vector<unsigned char>(OneArray,OneArray+32)), uint_error);
|
||||||
BOOST_CHECK(uint160(std::vector<unsigned char>(OneArray,OneArray+19)) == 0);
|
BOOST_CHECK_THROW(uint160(std::vector<unsigned char>(OneArray,OneArray+19)), uint_error);
|
||||||
}
|
}
|
||||||
|
|
||||||
void shiftArrayRight(unsigned char* to, const unsigned char* from, unsigned int arrayLength, unsigned int bitsToShift)
|
void shiftArrayRight(unsigned char* to, const unsigned char* from, unsigned int arrayLength, unsigned int bitsToShift)
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
#ifndef BITCOIN_UINT256_H
|
#ifndef BITCOIN_UINT256_H
|
||||||
#define BITCOIN_UINT256_H
|
#define BITCOIN_UINT256_H
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdexcept>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
@ -19,6 +21,11 @@ inline signed char HexDigit(char c)
|
||||||
return p_util_hexdigit[(unsigned char)c];
|
return p_util_hexdigit[(unsigned char)c];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class uint_error : public std::runtime_error {
|
||||||
|
public:
|
||||||
|
explicit uint_error(const std::string& str) : std::runtime_error(str) {}
|
||||||
|
};
|
||||||
|
|
||||||
/** Template base class for unsigned big integers. */
|
/** Template base class for unsigned big integers. */
|
||||||
template<unsigned int BITS>
|
template<unsigned int BITS>
|
||||||
class base_uint
|
class base_uint
|
||||||
|
@ -62,11 +69,9 @@ public:
|
||||||
|
|
||||||
explicit base_uint(const std::vector<unsigned char>& vch)
|
explicit base_uint(const std::vector<unsigned char>& vch)
|
||||||
{
|
{
|
||||||
if (vch.size() == sizeof(pn)) {
|
if (vch.size() != sizeof(pn))
|
||||||
memcpy(pn, &vch[0], sizeof(pn));
|
throw uint_error("Converting vector of wrong size to base_uint");
|
||||||
} else {
|
memcpy(pn, &vch[0], sizeof(pn));
|
||||||
*this = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator!() const
|
bool operator!() const
|
||||||
|
|
Loading…
Reference in a new issue