fix(security): slice memory allocation with excessive size value.

Signed-off-by: shuqiang-zheng <zhengshuqiang@oppo.com>
This commit is contained in:
shuqiang-zheng 2024-08-09 21:37:54 +08:00 committed by Victor1319
parent f8c677a041
commit dd741df686
4 changed files with 17 additions and 16 deletions

View File

@ -429,7 +429,7 @@ func (td *TxDentry) Unmarshal(raw []byte) (err error) {
return
}
if dataLen > proto.MaxBufferSize {
dataLen = proto.MaxBufferSize
return proto.ErrBufferSizeExceedMaximum
}
data := make([]byte, int(dataLen))
if _, err = buff.Read(data); err != nil {
@ -446,7 +446,7 @@ func (td *TxDentry) Unmarshal(raw []byte) (err error) {
return
}
if dataLen > proto.MaxBufferSize {
dataLen = proto.MaxBufferSize
return proto.ErrBufferSizeExceedMaximum
}
data = make([]byte, int(dataLen))
if _, err = buff.Read(data); err != nil {
@ -520,7 +520,7 @@ func (td *TxUpdateDentry) Unmarshal(raw []byte) (err error) {
return
}
if dataLen > proto.MaxBufferSize {
dataLen = proto.MaxBufferSize
return proto.ErrBufferSizeExceedMaximum
}
data := make([]byte, int(dataLen))
if _, err = buff.Read(data); err != nil {
@ -537,7 +537,7 @@ func (td *TxUpdateDentry) Unmarshal(raw []byte) (err error) {
return
}
if dataLen > proto.MaxBufferSize {
dataLen = proto.MaxBufferSize
return proto.ErrBufferSizeExceedMaximum
}
data = make([]byte, int(dataLen))
if _, err = buff.Read(data); err != nil {
@ -554,7 +554,7 @@ func (td *TxUpdateDentry) Unmarshal(raw []byte) (err error) {
return
}
if dataLen > proto.MaxBufferSize {
dataLen = proto.MaxBufferSize
return proto.ErrBufferSizeExceedMaximum
}
data = make([]byte, int(dataLen))
if _, err = buff.Read(data); err != nil {
@ -608,7 +608,7 @@ func (d *Dentry) Unmarshal(raw []byte) (err error) {
return
}
if keyLen > proto.MaxBufferSize {
keyLen = proto.MaxBufferSize
return proto.ErrBufferSizeExceedMaximum
}
keyBytes := make([]byte, keyLen)
if _, err = buff.Read(keyBytes); err != nil {
@ -621,7 +621,7 @@ func (d *Dentry) Unmarshal(raw []byte) (err error) {
return
}
if valLen > proto.MaxBufferSize {
valLen = proto.MaxBufferSize
return proto.ErrBufferSizeExceedMaximum
}
valBytes := make([]byte, valLen)
if _, err = buff.Read(valBytes); err != nil {

View File

@ -310,7 +310,7 @@ func (ti *TxInode) Unmarshal(raw []byte) (err error) {
return
}
if dataLen > proto.MaxBufferSize {
dataLen = proto.MaxBufferSize
return proto.ErrBufferSizeExceedMaximum
}
data := make([]byte, int(dataLen))
if _, err = buff.Read(data); err != nil {
@ -326,7 +326,7 @@ func (ti *TxInode) Unmarshal(raw []byte) (err error) {
return
}
if dataLen > proto.MaxBufferSize {
dataLen = proto.MaxBufferSize
return proto.ErrBufferSizeExceedMaximum
}
data = make([]byte, int(dataLen))
if _, err = buff.Read(data); err != nil {
@ -549,7 +549,7 @@ func (i *Inode) Unmarshal(raw []byte) (err error) {
return
}
if keyLen > proto.MaxBufferSize {
keyLen = proto.MaxBufferSize
return proto.ErrBufferSizeExceedMaximum
}
keyBytes := make([]byte, keyLen)
if _, err = buff.Read(keyBytes); err != nil {
@ -562,7 +562,7 @@ func (i *Inode) Unmarshal(raw []byte) (err error) {
return
}
if valLen > proto.MaxBufferSize {
valLen = proto.MaxBufferSize
return proto.ErrBufferSizeExceedMaximum
}
valBytes := make([]byte, valLen)
if _, err = buff.Read(valBytes); err != nil {
@ -778,7 +778,7 @@ func (i *Inode) UnmarshalInodeValue(buff *bytes.Buffer) (err error) {
}
if symSize > 0 {
if symSize > proto.MaxBufferSize {
symSize = proto.MaxBufferSize
return proto.ErrBufferSizeExceedMaximum
}
i.LinkTarget = make([]byte, symSize)
if _, err = io.ReadFull(buff, i.LinkTarget); err != nil {
@ -814,7 +814,7 @@ func (i *Inode) UnmarshalInodeValue(buff *bytes.Buffer) (err error) {
}
if extSize > 0 {
if extSize > proto.MaxBufferSize {
extSize = proto.MaxBufferSize
return proto.ErrBufferSizeExceedMaximum
}
extBytes := make([]byte, extSize)
if _, err = io.ReadFull(buff, extBytes); err != nil {
@ -848,7 +848,7 @@ func (i *Inode) UnmarshalInodeValue(buff *bytes.Buffer) (err error) {
}
if ObjExtSize > 0 {
if ObjExtSize > proto.MaxBufferSize {
ObjExtSize = proto.MaxBufferSize
return proto.ErrBufferSizeExceedMaximum
}
objExtBytes := make([]byte, ObjExtSize)
if _, err = io.ReadFull(buff, objExtBytes); err != nil {

View File

@ -91,7 +91,7 @@ func (qInode *MetaQuotaInode) Unmarshal(raw []byte) (err error) {
return
}
if inodeLen > proto.MaxBufferSize {
inodeLen = proto.MaxBufferSize
return proto.ErrBufferSizeExceedMaximum
}
inodeBytes := make([]byte, inodeLen)
if _, err = buff.Read(inodeBytes); err != nil {
@ -146,7 +146,7 @@ func (qInode *TxMetaQuotaInode) Unmarshal(raw []byte) (err error) {
return
}
if inodeLen > proto.MaxBufferSize {
inodeLen = proto.MaxBufferSize
return proto.ErrBufferSizeExceedMaximum
}
inodeBytes := make([]byte, inodeLen)
if _, err = buff.Read(inodeBytes); err != nil {

View File

@ -105,6 +105,7 @@ var (
ErrPerformingRestoreReplica = errors.New("is performing restore replica")
ErrPerformingDecommission = errors.New("is performing decommission")
ErrWaitForAutoAddReplica = errors.New("wait for auto add replica")
ErrBufferSizeExceedMaximum = errors.New("buffer size exceeds maximum")
)
// http response error code and error message definitions