Skip to content

Commit

Permalink
htlcswitch/hop/payload: extend tests to required type failures
Browse files Browse the repository at this point in the history
  • Loading branch information
cfromknecht committed Oct 9, 2019
1 parent b29005f commit 017eb23
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 5 deletions.
19 changes: 15 additions & 4 deletions htlcswitch/hop/payload.go
Expand Up @@ -120,10 +120,21 @@ func NewPayloadFromReader(r io.Reader) (*Payload, error) {
if err != nil {
// Promote any required type failures into ErrInvalidPayload.
if e, required := err.(tlv.ErrUnknownRequiredType); required {
// NOTE: FinalHop will be incorrect if the unknown
// required was type 0. Otherwise, the failure must have
// occurred after type 6 and cid should contain an
// accurate value.
// NOTE: Sigh. If the sender included a next hop whose
// value is zero, this would be considered invalid by
// our validation rules below. It's not totally clear
// whether this required failure should take precedence
// over the constraints applied by known types.
// Unfortunately this is an artifact of the layering
// violation in placing the even/odd rule in the parsing
// logic and not at a higher level of validation like
// the other presence/omission checks.
//
// As a result, this may need to be revisted if it is
// decided that the checks below overrule an unknown
// required type failure, in which case an
// IncludedViolation should be returned instead of the
// RequiredViolation.
return nil, ErrInvalidPayload{
Type: tlv.Type(e),
Violation: RequiredViolation,
Expand Down
24 changes: 23 additions & 1 deletion htlcswitch/hop/payload_test.go
Expand Up @@ -98,14 +98,36 @@ var decodePayloadTests = []decodePayloadTest{
},
},
{
name: "required type zero",
name: "required type zero final hop",
payload: []byte{0x00, 0x00},
expErr: hop.ErrInvalidPayload{
Type: 0,
Violation: hop.RequiredViolation,
FinalHop: true,
},
},
{
name: "required type zero final hop zero sid",
payload: []byte{0x00, 0x00, 0x06, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
},
expErr: hop.ErrInvalidPayload{
Type: 0,
Violation: hop.RequiredViolation,
FinalHop: true,
},
},
{
name: "required type zero intermediate hop",
payload: []byte{0x00, 0x00, 0x06, 0x08, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
},
expErr: hop.ErrInvalidPayload{
Type: 0,
Violation: hop.RequiredViolation,
FinalHop: false,
},
},
}

// TestDecodeHopPayloadRecordValidation asserts that parsing the payloads in the
Expand Down

0 comments on commit 017eb23

Please sign in to comment.