Fix over-read bug of go-mc/net packet

This commit is contained in:
Tnze
2021-02-27 01:15:44 +08:00
parent 3da9321f59
commit 21207830c0
2 changed files with 12 additions and 6 deletions

View File

@ -3,7 +3,6 @@
package nbt package nbt
import ( import (
"bufio"
"io" "io"
) )
@ -42,7 +41,17 @@ func NewDecoder(r io.Reader) *Decoder {
if br, ok := r.(DecoderReader); ok { if br, ok := r.(DecoderReader); ok {
d.r = br d.r = br
} else { } else {
d.r = bufio.NewReaderSize(r, 0) d.r = reader{r}
} }
return d return d
} }
type reader struct {
io.Reader
}
func (r reader) ReadByte() (byte, error) {
var b [1]byte
_, err := r.Read(b[:])
return b[0], err
}

View File

@ -3,10 +3,8 @@ package packet
import ( import (
"bytes" "bytes"
"compress/zlib" "compress/zlib"
"encoding/hex"
"fmt" "fmt"
"io" "io"
"os"
) )
// Packet define a net data package // Packet define a net data package
@ -27,9 +25,8 @@ func Marshal(id int32, fields ...FieldEncoder) (pk Packet) {
//Scan decode the packet and fill data into fields //Scan decode the packet and fill data into fields
func (p Packet) Scan(fields ...FieldDecoder) error { func (p Packet) Scan(fields ...FieldDecoder) error {
r := bytes.NewReader(p.Data) r := bytes.NewReader(p.Data)
rr := io.TeeReader(r, hex.Dumper(os.Stdout))
for _, v := range fields { for _, v := range fields {
_, err := v.ReadFrom(rr) _, err := v.ReadFrom(r)
if err != nil { if err != nil {
return err return err
} }