Improve CScriptNum() comment

Edited-by: Pieter Wuille <pieter.wuille@gmail.com>
This commit is contained in:
Peter Todd 2014-10-14 11:18:24 -04:00 committed by Pieter Wuille
parent 698c6abb25
commit 6004e77b92

View file

@ -197,9 +197,24 @@ public:
if (vch.size() > nMaxNumSize) { if (vch.size() > nMaxNumSize) {
throw scriptnum_error("script number overflow"); throw scriptnum_error("script number overflow");
} }
if (fRequireMinimal && vch.size() > 0 && (vch.back() & 0x7f) == 0 && (vch.size() <= 1 || (vch[vch.size() - 2] & 0x80) == 0)) { if (fRequireMinimal && vch.size() > 0) {
// Check that the number is encoded with the minimum possible
// number of bytes.
//
// If the most-significant-byte - excluding the sign bit - is zero
// then we're not minimal. Note how this test also rejects the
// negative-zero encoding, 0x80.
if ((vch.back() & 0x7f) == 0) {
// One exception: if there's more than one byte and the most
// significant bit of the second-most-significant-byte is set
// it would conflict with the sign bit. An example of this case
// is +-255, which encode to 0xff00 and 0xff80 respectively.
// (big-endian).
if (vch.size() <= 1 || (vch[vch.size() - 2] & 0x80) == 0) {
throw scriptnum_error("non-minimally encoded script number"); throw scriptnum_error("non-minimally encoded script number");
} }
}
}
m_value = set_vch(vch); m_value = set_vch(vch);
} }