MM-23489 Fix poor Unicode handling in display names (#14214)

Filter blacklisted Unicode characters from:

user: first name, last name, nickname, bot description, username
team: name, display name, description, company name
channel: name, display name
Этот коммит содержится в:
Doug Lauder
2020-04-07 16:56:07 -04:00
коммит произвёл GitHub
родитель 84859e7159
Коммит e2d1af17de
8 изменённых файлов: 296 добавлений и 2 удалений

Просмотреть файл

@@ -1567,6 +1567,69 @@ func TestPatchUser(t *testing.T) {
CheckNoError(t, resp)
}
func TestUserUnicodeNames(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()
Client := th.Client
t.Run("create user unicode", func(t *testing.T) {
user := model.User{
Email: th.GenerateTestEmail(),
FirstName: "Andrew\u202e",
LastName: "\ufeffWiggin",
Nickname: "Ender\u2028 Wiggin",
Password: "hello1",
Username: "\ufeffwiggin77",
Roles: model.SYSTEM_ADMIN_ROLE_ID + " " + model.SYSTEM_USER_ROLE_ID}
ruser, resp := Client.CreateUser(&user)
CheckNoError(t, resp)
CheckCreatedStatus(t, resp)
_, _ = Client.Login(user.Email, user.Password)
require.Equal(t, "wiggin77", ruser.Username, "Bad Unicode not filtered from username")
require.Equal(t, "Andrew Wiggin", ruser.GetDisplayName(model.SHOW_FULLNAME), "Bad Unicode not filtered from displayname")
require.Equal(t, "Ender Wiggin", ruser.Nickname, "Bad Unicode not filtered from nickname")
})
t.Run("update user unicode", func(t *testing.T) {
user := th.CreateUser()
Client.Login(user.Email, user.Password)
user.Username = "wiggin\ufff9"
user.Nickname = "Ender\u0340 \ufffcWiggin"
user.FirstName = "Andrew\ufff9"
user.LastName = "Wig\u206fgin"
ruser, resp := Client.UpdateUser(user)
CheckNoError(t, resp)
require.Equal(t, "wiggin", ruser.Username, "bad unicode should be filtered from username")
require.Equal(t, "Ender Wiggin", ruser.Nickname, "bad unicode should be filtered from nickname")
require.Equal(t, "Andrew Wiggin", ruser.GetDisplayName(model.SHOW_FULLNAME), "bad unicode should be filtered from display name")
})
t.Run("patch user unicode", func(t *testing.T) {
user := th.CreateUser()
Client.Login(user.Email, user.Password)
patch := &model.UserPatch{}
patch.Nickname = model.NewString("\U000E0000Ender\u206d Wiggin\U000E007F")
patch.FirstName = model.NewString("\U0001d173Andrew\U0001d17a")
patch.LastName = model.NewString("\u2028Wiggin\u2029")
ruser, resp := Client.PatchUser(user.Id, patch)
CheckNoError(t, resp)
CheckUserSanitization(t, ruser)
require.Equal(t, "Ender Wiggin", ruser.Nickname, "Bad unicode should be filtered from nickname")
require.Equal(t, "Andrew", ruser.FirstName, "Bad unicode should be filtered from first name")
require.Equal(t, "Wiggin", ruser.LastName, "Bad unicode should be filtered from last name")
require.Equal(t, "Andrew Wiggin", ruser.GetDisplayName(model.SHOW_FULLNAME), "Bad unicode should be filtered from display name")
})
}
func TestUpdateUserAuth(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()