1
0
mirror of https://github.com/golang/go synced 2024-11-26 08:48:13 -07:00

net/http: don't panic on very large MaxBytesReaderLimit

Fixes #54408
This commit is contained in:
cuiweixie 2022-08-12 20:22:21 +08:00
parent 8cb350d69a
commit a33fe7e206
2 changed files with 8 additions and 1 deletions

View File

@ -1168,7 +1168,8 @@ func (l *maxBytesReader) Read(p []byte) (n int, err error) {
// If they asked for a 32KB byte read but only 5 bytes are // If they asked for a 32KB byte read but only 5 bytes are
// remaining, no need to read 32KB. 6 bytes will answer the // remaining, no need to read 32KB. 6 bytes will answer the
// question of the whether we hit the limit or go past it. // question of the whether we hit the limit or go past it.
if int64(len(p)) > l.n+1 { // 0 < len(p) < 2^63
if int64(len(p))-1 > l.n {
p = p[:l.n+1] p = p[:l.n+1]
} }
n, err = l.r.Read(p) n, err = l.r.Read(p)

View File

@ -982,6 +982,12 @@ func TestMaxBytesReaderDifferentLimits(t *testing.T) {
wantN: len(testStr), wantN: len(testStr),
wantErr: false, wantErr: false,
}, },
10: { /* Issue 54408 */
limit: int64(1<<63-1),
lenP: len(testStr),
wantN: len(testStr),
wantErr: false,
},
} }
for i, tt := range tests { for i, tt := range tests {
rc := MaxBytesReader(nil, io.NopCloser(strings.NewReader(testStr)), tt.limit) rc := MaxBytesReader(nil, io.NopCloser(strings.NewReader(testStr)), tt.limit)