MM-44806: Avoid pointers in JSON parsing in updateCategoryForTeamForUser (#20431)
Passing null is a valid JSON input for a pointer struct. So we avoid passing pointer to pointer. https://mattermost.atlassian.net/browse/MM-44806 ```release-note NONE ```
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
b443746e80
Коммит
4b8cb4e272
@@ -275,21 +275,21 @@ func updateCategoryForTeamForUser(c *Context, w http.ResponseWriter, r *http.Req
|
|||||||
auditRec := c.MakeAuditRecord("updateCategoryForTeamForUser", audit.Fail)
|
auditRec := c.MakeAuditRecord("updateCategoryForTeamForUser", audit.Fail)
|
||||||
defer c.LogAuditRec(auditRec)
|
defer c.LogAuditRec(auditRec)
|
||||||
|
|
||||||
var categoryUpdateRequest *model.SidebarCategoryWithChannels
|
var categoryUpdateRequest model.SidebarCategoryWithChannels
|
||||||
err := json.NewDecoder(r.Body).Decode(&categoryUpdateRequest)
|
err := json.NewDecoder(r.Body).Decode(&categoryUpdateRequest)
|
||||||
if err != nil || categoryUpdateRequest.TeamId != c.Params.TeamId || categoryUpdateRequest.UserId != c.Params.UserId {
|
if err != nil || categoryUpdateRequest.TeamId != c.Params.TeamId || categoryUpdateRequest.UserId != c.Params.UserId {
|
||||||
c.SetInvalidParam("category")
|
c.SetInvalidParam("category")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if appErr := validateSidebarCategory(c, c.Params.TeamId, c.Params.UserId, categoryUpdateRequest); appErr != nil {
|
if appErr := validateSidebarCategory(c, c.Params.TeamId, c.Params.UserId, &categoryUpdateRequest); appErr != nil {
|
||||||
c.Err = appErr
|
c.Err = appErr
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
categoryUpdateRequest.Id = c.Params.CategoryId
|
categoryUpdateRequest.Id = c.Params.CategoryId
|
||||||
|
|
||||||
categories, appErr := c.App.UpdateSidebarCategories(c.Params.UserId, c.Params.TeamId, []*model.SidebarCategoryWithChannels{categoryUpdateRequest})
|
categories, appErr := c.App.UpdateSidebarCategories(c.Params.UserId, c.Params.TeamId, []*model.SidebarCategoryWithChannels{&categoryUpdateRequest})
|
||||||
if appErr != nil {
|
if appErr != nil {
|
||||||
c.Err = appErr
|
c.Err = appErr
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -429,6 +429,25 @@ func TestUpdateCategoryForTeamForUser(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.False(t, member.IsChannelMuted())
|
assert.False(t, member.IsChannelMuted())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("should not crash with null input", func(t *testing.T) {
|
||||||
|
require.NotPanics(t, func() {
|
||||||
|
user, client := setupUserForSubtest(t, th)
|
||||||
|
|
||||||
|
categories, _, err := client.GetSidebarCategoriesForTeamForUser(user.Id, th.BasicTeam.Id, "")
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Len(t, categories.Categories, 3)
|
||||||
|
require.Len(t, categories.Order, 3)
|
||||||
|
|
||||||
|
dmsCategory := categories.Categories[2]
|
||||||
|
|
||||||
|
payload := []byte(`null`)
|
||||||
|
route := fmt.Sprintf("/users/%s/teams/%s/channels/categories/%s", user.Id, th.BasicTeam.Id, dmsCategory.Id)
|
||||||
|
r, err := client.DoAPIPutBytes(route, payload)
|
||||||
|
require.Error(t, err)
|
||||||
|
closeBody(r)
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUpdateCategoriesForTeamForUser(t *testing.T) {
|
func TestUpdateCategoriesForTeamForUser(t *testing.T) {
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user