diff options
| author | chrislu <chris.lu@gmail.com> | 2022-10-23 14:00:15 -0700 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2022-10-23 14:00:15 -0700 |
| commit | e3ea544d40bf4ad86fce6e5911a3902c66b040b8 (patch) | |
| tree | 1990a39c6c4d2236c9ce380fb4e59bd3e65b4607 | |
| parent | 5294b6dd4da461378fac384ffbb06adac64c7a80 (diff) | |
| download | seaweedfs-e3ea544d40bf4ad86fce6e5911a3902c66b040b8.tar.xz seaweedfs-e3ea544d40bf4ad86fce6e5911a3902c66b040b8.zip | |
skip reading needle if size is invalid
related to https://github.com/seaweedfs/seaweedfs/issues/3882
| -rw-r--r-- | weed/storage/needle/needle_read.go | 1 | ||||
| -rw-r--r-- | weed/storage/needle/needle_read_page.go | 3 |
2 files changed, 4 insertions, 0 deletions
diff --git a/weed/storage/needle/needle_read.go b/weed/storage/needle/needle_read.go index 55d0cc893..620591898 100644 --- a/weed/storage/needle/needle_read.go +++ b/weed/storage/needle/needle_read.go @@ -24,6 +24,7 @@ const ( ) var ErrorSizeMismatch = errors.New("size mismatch") +var ErrorSizeInvalid = errors.New("size invalid") func (n *Needle) DiskSize(version Version) int64 { return GetActualSize(n.Size, version) diff --git a/weed/storage/needle/needle_read_page.go b/weed/storage/needle/needle_read_page.go index 47c3461bb..4e7edfb31 100644 --- a/weed/storage/needle/needle_read_page.go +++ b/weed/storage/needle/needle_read_page.go @@ -43,6 +43,9 @@ func (n *Needle) ReadNeedleMeta(r backend.BackendStorageFile, offset int64, size return ErrorSizeMismatch } } + if !n.Size.IsValid() { + return ErrorSizeInvalid + } n.DataSize = util.BytesToUint32(bytes[NeedleHeaderSize : NeedleHeaderSize+DataSizeSize]) startOffset := offset + NeedleHeaderSize + DataSizeSize + int64(n.DataSize) |
