mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-25 14:16:44 +00:00
swarm/network: guard against short data in store requests
This commit is contained in:
parent
38120c7d52
commit
cc7550785f
2 changed files with 5 additions and 2 deletions
|
|
@ -112,7 +112,7 @@ func (self *Depo) HandleStoreRequestMsg(req *storeRequestMsgData, p *peer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// update chunk with size and data
|
// update chunk with size and data
|
||||||
chunk.SData = req.SData
|
chunk.SData = req.SData // protocol validates that SData is minimum 9 bytes long (int64 size + at least one byte of data)
|
||||||
chunk.Size = int64(binary.LittleEndian.Uint64(req.SData[0:8]))
|
chunk.Size = int64(binary.LittleEndian.Uint64(req.SData[0:8]))
|
||||||
glog.V(logger.Detail).Infof("[BZZ] delivery of %p from %v", chunk, p)
|
glog.V(logger.Detail).Infof("[BZZ] delivery of %p from %v", chunk, p)
|
||||||
chunk.Source = p
|
chunk.Source = p
|
||||||
|
|
@ -136,7 +136,7 @@ func (self *Depo) HandleRetrieveRequestMsg(req *retrieveRequestMsgData, p *peer)
|
||||||
|
|
||||||
// call storage.NetStore#Get which
|
// call storage.NetStore#Get which
|
||||||
// blocks until local retrieval finished
|
// blocks until local retrieval finished
|
||||||
// launches cloud retrieval in a separate go routine
|
// launches cloud retrieval
|
||||||
chunk, _ := self.netStore.Get(req.Key)
|
chunk, _ := self.netStore.Get(req.Key)
|
||||||
req = self.strategyUpdateRequest(chunk.Req, req)
|
req = self.strategyUpdateRequest(chunk.Req, req)
|
||||||
// check if we can immediately deliver
|
// check if we can immediately deliver
|
||||||
|
|
|
||||||
|
|
@ -226,6 +226,9 @@ func (self *bzz) handle() error {
|
||||||
if err := msg.Decode(&req); err != nil {
|
if err := msg.Decode(&req); err != nil {
|
||||||
return self.protoError(ErrDecode, "<- %v: %v", msg, err)
|
return self.protoError(ErrDecode, "<- %v: %v", msg, err)
|
||||||
}
|
}
|
||||||
|
if len(req.SData) < 9 {
|
||||||
|
return self.protoError(ErrDecode, "<- %v: Data too short (%v)", msg)
|
||||||
|
}
|
||||||
glog.V(logger.Detail).Infof("[BZZ] incoming store request: %s", req.String())
|
glog.V(logger.Detail).Infof("[BZZ] incoming store request: %s", req.String())
|
||||||
// swap accounting is done within forwarding
|
// swap accounting is done within forwarding
|
||||||
self.storage.HandleStoreRequestMsg(&req, &peer{bzz: self})
|
self.storage.HandleStoreRequestMsg(&req, &peer{bzz: self})
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue