fix(wire): reject unsupported output types
Co-Authored-By: Charon <charon@lethean.io>
This commit is contained in:
parent
0ab8bfbd01
commit
2bebe323b8
2 changed files with 38 additions and 0 deletions
|
|
@ -342,6 +342,9 @@ func encodeOutputsV1(enc *Encoder, vout []types.TxOutput) {
|
|||
if !encodeTxOutTarget(enc, v.Target, "encodeOutputsV1") {
|
||||
return
|
||||
}
|
||||
default:
|
||||
enc.err = coreerr.E("encodeOutputsV1", fmt.Sprintf("wire: unsupported output type %T", out), nil)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -386,6 +389,9 @@ func encodeOutputsV2(enc *Encoder, vout []types.TxOutput) {
|
|||
enc.WriteBlob32((*[32]byte)(&v.BlindedAssetID))
|
||||
enc.WriteUint64LE(v.EncryptedAmount)
|
||||
enc.WriteUint8(v.MixAttr)
|
||||
default:
|
||||
enc.err = coreerr.E("encodeOutputsV2", fmt.Sprintf("wire: unsupported output type %T", out), nil)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -996,6 +996,10 @@ type unsupportedTxOutTarget struct{}
|
|||
|
||||
func (unsupportedTxOutTarget) TargetType() uint8 { return 250 }
|
||||
|
||||
type unsupportedTxOutput struct{}
|
||||
|
||||
func (unsupportedTxOutput) OutputType() uint8 { return 250 }
|
||||
|
||||
func TestEncodeTransaction_UnsupportedInput_Bad(t *testing.T) {
|
||||
tx := types.Transaction{
|
||||
Version: 1,
|
||||
|
|
@ -1045,3 +1049,31 @@ func TestEncodeTransaction_UnsupportedOutputTarget_Bad(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestEncodeTransaction_UnsupportedOutputType_Bad(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
version uint64
|
||||
}{
|
||||
{name: "v1", version: types.VersionPreHF4},
|
||||
{name: "v2", version: types.VersionPostHF4},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
tx := types.Transaction{
|
||||
Version: tt.version,
|
||||
Vin: []types.TxInput{types.TxInputGenesis{Height: 1}},
|
||||
Vout: []types.TxOutput{unsupportedTxOutput{}},
|
||||
Extra: EncodeVarint(0),
|
||||
}
|
||||
|
||||
var buf bytes.Buffer
|
||||
enc := NewEncoder(&buf)
|
||||
EncodeTransactionPrefix(enc, &tx)
|
||||
if enc.Err() == nil {
|
||||
t.Fatal("expected encode error for unsupported output type")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue