Avoid sending a partial dirent when the Rreaddir response exceeds message limit.
PiperOrigin-RevId: 304542967
This commit is contained in:
parent
dd3bc49997
commit
d151693530
|
@ -1926,19 +1926,17 @@ func (r *Rreaddir) decode(b *buffer) {
|
|||
// encode implements encoder.encode.
|
||||
func (r *Rreaddir) encode(b *buffer) {
|
||||
entriesBuf := buffer{}
|
||||
payloadSize := 0
|
||||
for _, d := range r.Entries {
|
||||
d.encode(&entriesBuf)
|
||||
if len(entriesBuf.data) >= int(r.Count) {
|
||||
if len(entriesBuf.data) > int(r.Count) {
|
||||
break
|
||||
}
|
||||
payloadSize = len(entriesBuf.data)
|
||||
}
|
||||
if len(entriesBuf.data) < int(r.Count) {
|
||||
r.Count = uint32(len(entriesBuf.data))
|
||||
r.payload = entriesBuf.data
|
||||
} else {
|
||||
r.payload = entriesBuf.data[:r.Count]
|
||||
}
|
||||
b.Write32(uint32(r.Count))
|
||||
r.Count = uint32(payloadSize)
|
||||
r.payload = entriesBuf.data[:payloadSize]
|
||||
b.Write32(r.Count)
|
||||
}
|
||||
|
||||
// Type implements message.Type.
|
||||
|
|
|
@ -216,7 +216,7 @@ func TestEncodeDecode(t *testing.T) {
|
|||
},
|
||||
&Rreaddir{
|
||||
// Count must be sufficient to encode a dirent.
|
||||
Count: 0x18,
|
||||
Count: 0x1a,
|
||||
Entries: []Dirent{{QID: QID{Type: 2}}},
|
||||
},
|
||||
&Tfsync{
|
||||
|
|
Loading…
Reference in New Issue