Sid value can be any unicode character support it (#6676)

Fixes #6476
master
Harshavardhana 6 years ago committed by Nitish Tiwari
parent 32bd1b31e9
commit b99aaab42e
  1. 11
      pkg/policy/id.go
  2. 10
      pkg/policy/id_test.go

@ -19,22 +19,15 @@ package policy
import ( import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"regexp" "unicode/utf8"
) )
var idRegexp = regexp.MustCompile("^[[:alnum:]]+$")
// ID - policy ID. // ID - policy ID.
type ID string type ID string
// IsValid - checks if ID is valid or not. // IsValid - checks if ID is valid or not.
func (id ID) IsValid() bool { func (id ID) IsValid() bool {
// Allow empty string as ID. return utf8.ValidString(string(id))
if string(id) == "" {
return true
}
return idRegexp.MatchString(string(id))
} }
// MarshalJSON - encodes ID to JSON data. // MarshalJSON - encodes ID to JSON data.

@ -29,13 +29,14 @@ func TestIDIsValid(t *testing.T) {
}{ }{
{ID("DenyEncryptionSt1"), true}, {ID("DenyEncryptionSt1"), true},
{ID(""), true}, {ID(""), true},
{ID("aa\xe2"), false},
} }
for i, testCase := range testCases { for i, testCase := range testCases {
result := testCase.id.IsValid() result := testCase.id.IsValid()
if result != testCase.expectedResult { if result != testCase.expectedResult {
t.Fatalf("case %v: result: expected: %v, got: %v\n", i+1, testCase.expectedResult, result) t.Errorf("case %v: result: expected: %v, got: %v\n", i+1, testCase.expectedResult, result)
} }
} }
} }
@ -46,10 +47,9 @@ func TestIDMarshalJSON(t *testing.T) {
expectedResult []byte expectedResult []byte
expectErr bool expectErr bool
}{ }{
{ID("foo"), []byte(`"foo"`), false},
{ID("1234"), []byte(`"1234"`), false},
{ID("DenyEncryptionSt1"), []byte(`"DenyEncryptionSt1"`), false}, {ID("DenyEncryptionSt1"), []byte(`"DenyEncryptionSt1"`), false},
{ID(""), []byte(`""`), false}, {ID(""), []byte(`""`), false},
{ID("aa\xe2"), nil, true}, // invalid utf-8
} }
for i, testCase := range testCases { for i, testCase := range testCases {
@ -74,11 +74,9 @@ func TestIDUnmarshalJSON(t *testing.T) {
expectedResult ID expectedResult ID
expectErr bool expectErr bool
}{ }{
{[]byte(`"foo"`), ID("foo"), false},
{[]byte(`"1234"`), ID("1234"), false},
{[]byte(`"DenyEncryptionSt1"`), ID("DenyEncryptionSt1"), false}, {[]byte(`"DenyEncryptionSt1"`), ID("DenyEncryptionSt1"), false},
{[]byte(`""`), ID(""), false}, {[]byte(`""`), ID(""), false},
{[]byte(`"foo bar"`), ID(""), true}, {[]byte(`"aa\xe2"`), ID(""), true},
} }
for i, testCase := range testCases { for i, testCase := range testCases {

Loading…
Cancel
Save