Merge pull request #163 from Crypt-iQ/psbt_fixes_0409

psbt: fix two deserialization bugs
This commit is contained in:
Olaoluwa Osuntokun 2020-04-10 17:06:09 -07:00 committed by GitHub
commit b2bf7f89d6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 0 deletions

View file

@ -141,6 +141,12 @@ func (pi *PInput) deserialize(r io.Reader) error {
return ErrInvalidKeydata
}
// Bounds check on value here since the sighash type must be a
// 32-bit unsigned integer.
if len(value) != 4 {
return ErrInvalidKeydata
}
shtype := txscript.SigHashType(
binary.LittleEndian.Uint32(value),
)

View file

@ -33,6 +33,10 @@ var (
//less than 4M.
const MaxPsbtValueLength = 4000000
// MaxPsbtKeyLength is the length of the largest key that we'll successfully
// deserialize from the wire. Anything more will return ErrInvalidKeydata.
const MaxPsbtKeyLength = 10000
var (
// ErrInvalidPsbtFormat is a generic error for any situation in which a

View file

@ -237,6 +237,11 @@ func getKey(r io.Reader) (int, []byte, error) {
return -1, nil, nil
}
// Check that we don't attempt to decode a dangerously large key.
if count > MaxPsbtKeyLength {
return -1, nil, ErrInvalidKeydata
}
// Next, we ready out the designated number of bytes, which may include
// a type, key, and optional data.
keyTypeAndData := make([]byte, count)