Fix over-read bug of go-mc/net packet
This commit is contained in:
13
nbt/nbt.go
13
nbt/nbt.go
@ -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
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user