Merge pull request #6847 from ipfs/fix/6765

fix: fix a potential out of bounds issue in fuse
This commit is contained in:
Steven Allen 2020-01-28 18:30:43 -08:00 committed by GitHub
commit 8e0f92b69e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -257,13 +257,15 @@ func (s *Node) Read(ctx context.Context, req *fuse.ReadRequest, resp *fuse.ReadR
if err != nil {
return err
}
buf := resp.Data[:min(req.Size, int(int64(r.Size())-req.Offset))]
// Data has a capacity of Size
buf := resp.Data[:int(req.Size)]
n, err := io.ReadFull(r, buf)
if err != nil && err != io.EOF {
resp.Data = buf[:n]
switch err {
case nil, io.EOF, io.ErrUnexpectedEOF:
default:
return err
}
resp.Data = resp.Data[:n]
lm["res_size"] = n
return nil // may be non-nil / not succeeded
}
@ -287,10 +289,3 @@ type roNode interface {
}
var _ roNode = (*Node)(nil)
func min(a, b int) int {
if a < b {
return a
}
return b
}