From 5a73041f1b9b5e16c5fbc1b46349e74c7abbdb6c Mon Sep 17 00:00:00 2001 From: Siggi Date: Wed, 20 Jul 2022 11:58:50 +0200 Subject: [PATCH] Added check for nonstandard short script when parsing PublicKeyHash --- bscript/script.go | 2 +- bscript/script_test.go | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/bscript/script.go b/bscript/script.go index 0ff6dadd..d5e16f89 100644 --- a/bscript/script.go +++ b/bscript/script.go @@ -336,7 +336,7 @@ func (s *Script) PublicKeyHash() ([]byte, error) { return nil, ErrEmptyScript } - if (*s)[0] != OpDUP || (*s)[1] != OpHASH160 { + if (*s)[0] != OpDUP || len(*s) <= 2 || (*s)[1] != OpHASH160 { return nil, ErrNotP2PKH } diff --git a/bscript/script_test.go b/bscript/script_test.go index b3eec7d8..b43b7c05 100644 --- a/bscript/script_test.go +++ b/bscript/script_test.go @@ -236,6 +236,17 @@ func TestScript_PublicKeyHash(t *testing.T) { assert.Error(t, err) assert.EqualError(t, err, "script is empty") }) + + t.Run("nonstandard script", func(t *testing.T) { + // example tx 37d4cc9f8a3b62e7f2e7c97c07a3282bfa924739c0e174733ff1b764ef8e3ebc + s, err := bscript.NewFromHexString("76") + assert.NoError(t, err) + assert.NotNil(t, s) + + _, err = s.PublicKeyHash() + assert.Error(t, err) + assert.EqualError(t, err, "not a P2PKH") + }) } func TestErrorIsAppended(t *testing.T) {