|
@@ -31,12 +31,10 @@ func (l *lengthField) check(curOffset int, buf []byte) error {
|
|
|
type varintLengthField struct {
|
|
type varintLengthField struct {
|
|
|
startOffset int
|
|
startOffset int
|
|
|
length int64
|
|
length int64
|
|
|
- consumed bool
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (l *varintLengthField) decode(pd packetDecoder) error {
|
|
func (l *varintLengthField) decode(pd packetDecoder) error {
|
|
|
var err error
|
|
var err error
|
|
|
- l.consumed = true
|
|
|
|
|
l.length, err = pd.getVarint()
|
|
l.length, err = pd.getVarint()
|
|
|
return err
|
|
return err
|
|
|
}
|
|
}
|
|
@@ -53,10 +51,6 @@ func (l *varintLengthField) adjustLength(currOffset int) int {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (l *varintLengthField) reserveLength() int {
|
|
func (l *varintLengthField) reserveLength() int {
|
|
|
- if l.consumed { // the field was consumed during the decode
|
|
|
|
|
- l.consumed = false
|
|
|
|
|
- return 0
|
|
|
|
|
- }
|
|
|
|
|
var tmp [binary.MaxVarintLen64]byte
|
|
var tmp [binary.MaxVarintLen64]byte
|
|
|
return binary.PutVarint(tmp[:], l.length)
|
|
return binary.PutVarint(tmp[:], l.length)
|
|
|
}
|
|
}
|
|
@@ -67,7 +61,7 @@ func (l *varintLengthField) run(curOffset int, buf []byte) error {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (l *varintLengthField) check(curOffset int, buf []byte) error {
|
|
func (l *varintLengthField) check(curOffset int, buf []byte) error {
|
|
|
- if int64(curOffset-l.startOffset) != l.length {
|
|
|
|
|
|
|
+ if int64(curOffset-l.startOffset-l.reserveLength()) != l.length {
|
|
|
return PacketDecodingError{"length field invalid"}
|
|
return PacketDecodingError{"length field invalid"}
|
|
|
}
|
|
}
|
|
|
|
|
|