Fix panic in api4.searchPosts (#15410)
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
4c518055f4
Коммит
7612888052
@@ -466,7 +466,11 @@ func searchPosts(c *Context, w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
params := model.SearchParameterFromJson(r.Body)
|
params, jsonErr := model.SearchParameterFromJson(r.Body)
|
||||||
|
if jsonErr != nil {
|
||||||
|
c.Err = model.NewAppError("searchPosts", "api.post.search_posts.invalid_body.app_error", nil, jsonErr.Error(), http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if params.Terms == nil || len(*params.Terms) == 0 {
|
if params.Terms == nil || len(*params.Terms) == 0 {
|
||||||
c.SetInvalidParam("terms")
|
c.SetInvalidParam("terms")
|
||||||
|
|||||||
@@ -1790,6 +1790,10 @@
|
|||||||
"id": "api.post.save_is_pinned_post.town_square_read_only",
|
"id": "api.post.save_is_pinned_post.town_square_read_only",
|
||||||
"translation": "This channel is read-only. Only members with permission can pin or unpin posts here."
|
"translation": "This channel is read-only. Only members with permission can pin or unpin posts here."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "api.post.search_posts.invalid_body.app_error",
|
||||||
|
"translation": "Unable to parse the request body."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "api.post.send_notification_and_forget.push_channel_mention",
|
"id": "api.post.send_notification_and_forget.push_channel_mention",
|
||||||
"translation": " notified the channel."
|
"translation": " notified the channel."
|
||||||
|
|||||||
@@ -497,15 +497,14 @@ func (o *SearchParameter) SearchParameterToJson() string {
|
|||||||
return string(b)
|
return string(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
func SearchParameterFromJson(data io.Reader) *SearchParameter {
|
func SearchParameterFromJson(data io.Reader) (*SearchParameter, error) {
|
||||||
decoder := json.NewDecoder(data)
|
decoder := json.NewDecoder(data)
|
||||||
var searchParam SearchParameter
|
var searchParam SearchParameter
|
||||||
err := decoder.Decode(&searchParam)
|
if err := decoder.Decode(&searchParam); err != nil {
|
||||||
if err != nil {
|
return nil, err
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return &searchParam
|
return &searchParam, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *Post) ChannelMentions() []string {
|
func (o *Post) ChannelMentions() []string {
|
||||||
|
|||||||
@@ -856,3 +856,31 @@ func TestPostPatchDisableMentionHighlights(t *testing.T) {
|
|||||||
assert.Nil(t, patch.Message)
|
assert.Nil(t, patch.Message)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSearchParameterFromJson(t *testing.T) {
|
||||||
|
t.Run("empty input", func(t *testing.T) {
|
||||||
|
params, err := SearchParameterFromJson(strings.NewReader(""))
|
||||||
|
require.Nil(t, params)
|
||||||
|
require.Error(t, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("invalid json", func(t *testing.T) {
|
||||||
|
params, err := SearchParameterFromJson(strings.NewReader("invalid"))
|
||||||
|
require.Nil(t, params)
|
||||||
|
require.Error(t, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("valid empty input", func(t *testing.T) {
|
||||||
|
params, err := SearchParameterFromJson(strings.NewReader("{}"))
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NotNil(t, params)
|
||||||
|
require.Equal(t, &SearchParameter{}, params)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("valid non-empty input", func(t *testing.T) {
|
||||||
|
params, err := SearchParameterFromJson(strings.NewReader("{\"terms\": \"test\"}"))
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NotNil(t, params)
|
||||||
|
require.Equal(t, "test", *params.Terms)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user