1package moxio
2
3import (
4 "errors"
5 "io"
6)
7
8var 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.
12type LimitReader struct {
13 R io.Reader
14 Limit int64
15}
16
17// Read reads bytes from the underlying reader.
18func (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