1
package moxio
2
3
import (
4
"errors"
5
"io"
6
)
7
8
var ErrLimit = errors.New("input exceeds maximum size") // Returned by LimitReader.
9
10
// LimitReader reads up to Limit bytes, returning an error if more bytes are
11
// read. LimitReader can be used to enforce a maximum input length.
12
type LimitReader struct {
13
R io.Reader
14
Limit int64
15
}
16
17
// Read reads bytes from the underlying reader.
18
func (r *LimitReader) Read(buf []byte) (int, error) {
19
n, err := r.R.Read(buf)
20
if n > 0 {
21
r.Limit -= int64(n)
22
if r.Limit < 0 {
23
return 0, ErrLimit
24
}
25
}
26
return n, err
27
}
28