mirror of
https://github.com/minio/minio.git
synced 2025-11-09 05:34:56 -05:00
S3 only allows http headers with a size of 8 KB and user-defined metadata with a size of 2 KB. This change adds a new API error and returns this error to clients which sends to large http requests. Fixes #4634
This commit is contained in:
committed by
Dee Koder
parent
b694c1a4d7
commit
3a73c675a6
@@ -18,6 +18,7 @@ package cmd
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@@ -88,3 +89,37 @@ func TestGuessIsBrowser(t *testing.T) {
|
||||
t.Fatal("Test shouldn't report as browser for a non browser request.")
|
||||
}
|
||||
}
|
||||
|
||||
var isHTTPHeaderSizeTooLargeTests = []struct {
|
||||
header http.Header
|
||||
shouldFail bool
|
||||
}{
|
||||
{header: generateHeader(0, 0), shouldFail: false},
|
||||
{header: generateHeader(1024, 0), shouldFail: false},
|
||||
{header: generateHeader(2048, 0), shouldFail: false},
|
||||
{header: generateHeader(8*1024+1, 0), shouldFail: true},
|
||||
{header: generateHeader(0, 1024), shouldFail: false},
|
||||
{header: generateHeader(0, 2048), shouldFail: true},
|
||||
{header: generateHeader(0, 2048+1), shouldFail: true},
|
||||
}
|
||||
|
||||
func generateHeader(size, usersize int) http.Header {
|
||||
header := http.Header{}
|
||||
for i := 0; i < size; i++ {
|
||||
header.Add(strconv.Itoa(i), "")
|
||||
}
|
||||
userlength := 0
|
||||
for i := 0; userlength < usersize; i++ {
|
||||
userlength += len(userMetadataKeyPrefixes[0] + strconv.Itoa(i))
|
||||
header.Add(userMetadataKeyPrefixes[0]+strconv.Itoa(i), "")
|
||||
}
|
||||
return header
|
||||
}
|
||||
|
||||
func TestIsHTTPHeaderSizeTooLarge(t *testing.T) {
|
||||
for i, test := range isHTTPHeaderSizeTooLargeTests {
|
||||
if res := isHTTPHeaderSizeTooLarge(test.header); res != test.shouldFail {
|
||||
t.Errorf("Test %d: Expected %v got %v", i, res, test.shouldFail)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user