diff options
| author | Chris Lu <chris.lu@gmail.com> | 2018-12-10 20:57:01 -0800 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2018-12-10 20:57:01 -0800 |
| commit | 8f78a069c645dcd763151aee65b93f0c7794976b (patch) | |
| tree | be1c7a76f1725d6c997fa81a35da823a69279d8b | |
| parent | 4a490fe35a9869e93240ef2b9c73dc7aa4b02749 (diff) | |
| download | seaweedfs-8f78a069c645dcd763151aee65b93f0c7794976b.tar.xz seaweedfs-8f78a069c645dcd763151aee65b93f0c7794976b.zip | |
fix possible name overflow when len(name)>255
| -rw-r--r-- | weed/storage/needle_read_write.go | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/weed/storage/needle_read_write.go b/weed/storage/needle_read_write.go index aa5974842..3b958a342 100644 --- a/weed/storage/needle_read_write.go +++ b/weed/storage/needle_read_write.go @@ -9,6 +9,7 @@ import ( "github.com/chrislusf/seaweedfs/weed/glog" . "github.com/chrislusf/seaweedfs/weed/storage/types" "github.com/chrislusf/seaweedfs/weed/util" + "math" ) const ( @@ -65,7 +66,12 @@ func (n *Needle) Append(w io.Writer, version Version) (size uint32, actualSize i header := make([]byte, NeedleEntrySize+TimestampSize) // adding timestamp to reuse it and avoid extra allocation CookieToBytes(header[0:CookieSize], n.Cookie) NeedleIdToBytes(header[CookieSize:CookieSize+NeedleIdSize], n.Id) - n.DataSize, n.NameSize, n.MimeSize = uint32(len(n.Data)), uint8(len(n.Name)), uint8(len(n.Mime)) + if len(n.Name) >= math.MaxUint8 { + n.NameSize = math.MaxInt8 + } else { + n.NameSize = uint8(len(n.Name)) + } + n.DataSize, n.MimeSize = uint32(len(n.Data)), uint8(len(n.Mime)) if n.DataSize > 0 { n.Size = 4 + n.DataSize + 1 if n.HasName() { @@ -108,7 +114,7 @@ func (n *Needle) Append(w io.Writer, version Version) (size uint32, actualSize i if _, err = w.Write(header[0:1]); err != nil { return } - if _, err = w.Write(n.Name); err != nil { + if _, err = w.Write(n.Name[:n.NameSize]); err != nil { return } } |
