Merge pull request #7618 from changweige/enlarge-limit-key
image/label: print more characters of label keys
This commit is contained in:
		| @@ -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 | ||||
| } | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Derek McGowan
					Derek McGowan