From c72fb747b8a64117538229f1e5a85d220349b6f1 Mon Sep 17 00:00:00 2001 From: dafengge0913 Date: Sat, 10 Sep 2022 13:05:34 +0800 Subject: [PATCH] Fix DeleteComment slice bounds out of range (#1343) --- comment.go | 23 +++++++++++++---------- comment_test.go | 6 +++++- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/comment.go b/comment.go index ac22ec7..a75ea7f 100644 --- a/comment.go +++ b/comment.go @@ -156,17 +156,20 @@ func (f *File) DeleteComment(sheet, cell string) (err error) { } commentsXML = strings.TrimPrefix(commentsXML, "/") if comments := f.commentsReader(commentsXML); comments != nil { - for i, cmt := range comments.CommentList.Comment { - if cmt.Ref == cell { - if len(comments.CommentList.Comment) > 1 { - comments.CommentList.Comment = append( - comments.CommentList.Comment[:i], - comments.CommentList.Comment[i+1:]..., - ) - continue - } - comments.CommentList.Comment = nil + for i := 0; i < len(comments.CommentList.Comment); i++ { + cmt := comments.CommentList.Comment[i] + if cmt.Ref != cell { + continue + } + if len(comments.CommentList.Comment) > 1 { + comments.CommentList.Comment = append( + comments.CommentList.Comment[:i], + comments.CommentList.Comment[i+1:]..., + ) + i-- + continue } + comments.CommentList.Comment = nil } f.Comments[commentsXML] = comments } diff --git a/comment_test.go b/comment_test.go index 64e9968..0d1e039 100644 --- a/comment_test.go +++ b/comment_test.go @@ -55,15 +55,19 @@ func TestDeleteComment(t *testing.T) { assert.NoError(t, f.AddComment("Sheet2", "A40", `{"author":"Excelize: ","text":"This is a comment1."}`)) assert.NoError(t, f.AddComment("Sheet2", "A41", `{"author":"Excelize: ","text":"This is a comment2."}`)) assert.NoError(t, f.AddComment("Sheet2", "C41", `{"author":"Excelize: ","text":"This is a comment3."}`)) + assert.NoError(t, f.AddComment("Sheet2", "C41", `{"author":"Excelize: ","text":"This is a comment3-1."}`)) + assert.NoError(t, f.AddComment("Sheet2", "C42", `{"author":"Excelize: ","text":"This is a comment4."}`)) + assert.NoError(t, f.AddComment("Sheet2", "C41", `{"author":"Excelize: ","text":"This is a comment3-2."}`)) assert.NoError(t, f.DeleteComment("Sheet2", "A40")) - assert.EqualValues(t, 2, len(f.GetComments()["Sheet2"])) + assert.EqualValues(t, 5, len(f.GetComments()["Sheet2"])) assert.EqualValues(t, len(NewFile().GetComments()), 0) // Test delete all comments in a worksheet assert.NoError(t, f.DeleteComment("Sheet2", "A41")) assert.NoError(t, f.DeleteComment("Sheet2", "C41")) + assert.NoError(t, f.DeleteComment("Sheet2", "C42")) assert.EqualValues(t, 0, len(f.GetComments()["Sheet2"])) // Test delete comment on not exists worksheet assert.EqualError(t, f.DeleteComment("SheetN", "A1"), "sheet SheetN does not exist") -- GitLab