Merge pull request #7618 from changweige/enlarge-limit-key

image/label: print more characters of label keys
This commit is contained in:
Derek McGowan 2022-12-22 17:26:26 -08:00 committed by GitHub
commit 6c8c427166
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 4 deletions

View File

@ -24,15 +24,18 @@ import (
const (
maxSize = 4096
// maximum length of key portion of error message if len of key + len of value > maxSize
keyMaxLen = 64
)
// Validate a label's key and value are under 4096 bytes
func Validate(k, v string) error {
if (len(k) + len(v)) > maxSize {
if len(k) > 10 {
k = k[:10]
total := len(k) + len(v)
if total > maxSize {
if len(k) > keyMaxLen {
k = k[:keyMaxLen]
}
return fmt.Errorf("label key and value greater than maximum size (%d bytes), key: %s: %w", maxSize, k, errdefs.ErrInvalidArgument)
return fmt.Errorf("label key and value length (%d bytes) greater than maximum size (%d bytes), key: %s: %w", total, maxSize, k, errdefs.ErrInvalidArgument)
}
return nil
}

View File

@ -21,6 +21,7 @@ import (
"testing"
"github.com/containerd/containerd/errdefs"
"github.com/stretchr/testify/assert"
)
func TestValidLabels(t *testing.T) {
@ -51,3 +52,29 @@ func TestInvalidLabels(t *testing.T) {
}
}
}
func TestLongKey(t *testing.T) {
key := strings.Repeat("s", keyMaxLen+1)
value := strings.Repeat("v", maxSize-len(key))
err := Validate(key, value)
assert.Equal(t, err, nil)
key = strings.Repeat("s", keyMaxLen+12)
value = strings.Repeat("v", maxSize-len(key)+1)
err = Validate(key, value)
assert.ErrorIs(t, err, errdefs.ErrInvalidArgument)
key = strings.Repeat("s", keyMaxLen-1)
value = strings.Repeat("v", maxSize-len(key))
err = Validate(key, value)
assert.Equal(t, err, nil)
key = strings.Repeat("s", keyMaxLen-1)
value = strings.Repeat("v", maxSize-len(key)-1)
err = Validate(key, value)
assert.Equal(t, err, nil)
}