From f0fd8f9b90c4266a3b85332f05a8ed0ff02c229f Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Sun, 24 Mar 2024 10:51:19 +0800 Subject: [PATCH] :art: Unable to replace `{{foo}}` in code block Fix https://github.com/siyuan-note/siyuan/issues/10706 --- kernel/go.mod | 2 +- kernel/go.sum | 4 ++-- kernel/model/search.go | 15 ++++++++++++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/kernel/go.mod b/kernel/go.mod index 3031c0909..c2834e829 100644 --- a/kernel/go.mod +++ b/kernel/go.mod @@ -8,7 +8,7 @@ require ( code.sajari.com/docconv v1.3.8 github.com/88250/clipboard v0.1.5 github.com/88250/epub v0.0.0-20230830085737-c19055cd1f48 - github.com/88250/gulu v1.2.3-0.20231209020950-b7b6994e395c + github.com/88250/gulu v1.2.3-0.20240324024901-3c1bb82cba30 github.com/88250/lute v1.7.7-0.20240317033923-b5d564e25df7 github.com/88250/pdfcpu v0.3.14-0.20230401044135-c7369a99720c github.com/88250/vitess-sqlparser v0.0.0-20210205111146-56a2ded2aba1 diff --git a/kernel/go.sum b/kernel/go.sum index c9fbd23bb..bc7963038 100644 --- a/kernel/go.sum +++ b/kernel/go.sum @@ -8,8 +8,8 @@ github.com/88250/epub v0.0.0-20230830085737-c19055cd1f48 h1:qiE88Pw/9GG8hvMfpfB4 github.com/88250/epub v0.0.0-20230830085737-c19055cd1f48/go.mod h1:UgVSq5iO9pOvqs3hIGNVk6WXDiAB0v3Dlg4nssQJ7W4= github.com/88250/go-sqlite3 v1.14.13-0.20231214121541-e7f54c482950 h1:Pa5hMiBceTVVqrYaDlLio2QSKbXMUmAZPbzCwT5eNCw= github.com/88250/go-sqlite3 v1.14.13-0.20231214121541-e7f54c482950/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/88250/gulu v1.2.3-0.20231209020950-b7b6994e395c h1:Fas3hxqP33xA9KKDV50jUmppiiOukk5bdV00Hk5VSSk= -github.com/88250/gulu v1.2.3-0.20231209020950-b7b6994e395c/go.mod h1:pTWnjt+6qUqNnP9xltswsJxgCBVu3C7eW09u48LWX0k= +github.com/88250/gulu v1.2.3-0.20240324024901-3c1bb82cba30 h1:IeE4DVRWnVpcbMj7gGZoSMiBWs3h/ihiyOmualS1Mas= +github.com/88250/gulu v1.2.3-0.20240324024901-3c1bb82cba30/go.mod h1:MUfzyfmbPrRDZLqxc7aPrVYveatTHRfoUa5TynPS0i8= github.com/88250/lute v1.7.7-0.20240317033923-b5d564e25df7 h1:egkoxNZeGBDcUCd4kUHgeYIZZ7uNHTK+TT+K2yZTHm0= github.com/88250/lute v1.7.7-0.20240317033923-b5d564e25df7/go.mod h1:VDAzL8b+oCh+e3NAlmwwLzC53ten0rZlS8NboB7ljtk= github.com/88250/pdfcpu v0.3.14-0.20230401044135-c7369a99720c h1:Dl/8S9iLyPMTElnWIBxmjaLiWrkI5P4a21ivwAn5pU0= diff --git a/kernel/model/search.go b/kernel/model/search.go index 3f5a69a21..21f7a18dd 100644 --- a/kernel/model/search.go +++ b/kernel/model/search.go @@ -1299,7 +1299,20 @@ func fromSQLBlock(sqlBlock *sql.Block, terms string, beforeLen int) (block *Bloc } id := sqlBlock.ID - content := util.EscapeHTML(sqlBlock.Content) // Search dialog XSS https://github.com/siyuan-note/siyuan/issues/8525 + content := sqlBlock.Content + if 1 < strings.Count(content, search.SearchMarkRight) && strings.HasSuffix(content, search.SearchMarkRight+"...") { + // 返回多个关键字命中时需要检查最后一个关键字是否被截断 + firstKeyword := gulu.Str.SubStringBetween(content, search.SearchMarkLeft, search.SearchMarkRight) + lastKeyword := gulu.Str.LastSubStringBetween(content, search.SearchMarkLeft, search.SearchMarkRight) + if firstKeyword != lastKeyword { + // 如果第一个关键字和最后一个关键字不相同,说明最后一个关键字被截断了 + // 此时需要将 content 中的最后一个关键字替换为完整的关键字 + content = strings.TrimSuffix(content, search.SearchMarkLeft+lastKeyword+search.SearchMarkRight+"...") + content += search.SearchMarkLeft + firstKeyword + search.SearchMarkRight + "..." + } + } + + content = util.EscapeHTML(content) // Search dialog XSS https://github.com/siyuan-note/siyuan/issues/8525 content, _ = markSearch(content, terms, beforeLen) content = maxContent(content, 5120) markdown := maxContent(sqlBlock.Markdown, 5120)