mirror of
https://github.com/infinite-iroha/touka.git
synced 2026-06-13 15:47:38 +08:00
fix(maxreader): treat non-positive limits as unlimited
This commit is contained in:
parent
91c50536c4
commit
e6ff0fa6b9
2 changed files with 10 additions and 23 deletions
|
|
@ -27,16 +27,6 @@ func (r *zeroNilThenEOFReader) Close() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type zeroNilForeverReader struct{}
|
|
||||||
|
|
||||||
func (r *zeroNilForeverReader) Read(_ []byte) (int, error) {
|
|
||||||
return 0, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *zeroNilForeverReader) Close() error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestFileTextUsesProvidedStatusCode(t *testing.T) {
|
func TestFileTextUsesProvidedStatusCode(t *testing.T) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
|
|
||||||
|
|
@ -107,21 +97,18 @@ func TestMaxBytesReaderAllowsZeroNilThenEOFAtExactLimit(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMaxBytesReaderRejectsOverLimitWithoutProbeLoop(t *testing.T) {
|
func TestMaxBytesReaderTreatsZeroLimitAsUnlimited(t *testing.T) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
|
|
||||||
reader := NewMaxBytesReader(&zeroNilForeverReader{}, 0)
|
reader := NewMaxBytesReader(io.NopCloser(strings.NewReader("abc")), 0)
|
||||||
defer reader.Close()
|
defer reader.Close()
|
||||||
|
|
||||||
buf := make([]byte, 1)
|
data, err := io.ReadAll(reader)
|
||||||
n, err := reader.Read(buf)
|
if err != nil {
|
||||||
if n != 0 || err != nil {
|
t.Fatalf("expected zero limit to leave body unlimited, got %v", err)
|
||||||
t.Fatalf("expected initial zero,nil read result, got n=%d err=%v", n, err)
|
|
||||||
}
|
}
|
||||||
|
if string(data) != "abc" {
|
||||||
n, err = reader.Read(buf)
|
t.Fatalf("unexpected data: %q", string(data))
|
||||||
if n != 0 || !errors.Is(err, ErrBodyTooLarge) {
|
|
||||||
t.Fatalf("expected ErrBodyTooLarge after repeated zero,nil reads, got n=%d err=%v", n, err)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,13 +31,13 @@ type maxBytesReader struct {
|
||||||
// 但在读取的字节数超过 n 后会返回 ErrBodyTooLarge 错误.
|
// 但在读取的字节数超过 n 后会返回 ErrBodyTooLarge 错误.
|
||||||
//
|
//
|
||||||
// 如果 r 为 nil, 会 panic.
|
// 如果 r 为 nil, 会 panic.
|
||||||
// 如果 n 小于 0, 则读取不受限制, 直接返回原始的 r.
|
// 如果 n 小于等于 0, 则读取不受限制, 直接返回原始的 r.
|
||||||
func NewMaxBytesReader(r io.ReadCloser, n int64) io.ReadCloser {
|
func NewMaxBytesReader(r io.ReadCloser, n int64) io.ReadCloser {
|
||||||
if r == nil {
|
if r == nil {
|
||||||
panic("NewMaxBytesReader called with a nil reader")
|
panic("NewMaxBytesReader called with a nil reader")
|
||||||
}
|
}
|
||||||
// 如果限制为负数, 意味着不限制, 直接返回原始的 ReadCloser.
|
// 如果限制为非正数, 意味着不限制, 直接返回原始的 ReadCloser.
|
||||||
if n < 0 {
|
if n <= 0 {
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
return &maxBytesReader{
|
return &maxBytesReader{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue