🎨 Limit KaTex macro maximum recursive parsing depth is 16 https://github.com/siyuan-note/siyuan/issues/10484

This commit is contained in:
Daniel 2024-03-02 23:00:15 +08:00
parent 8615c5f1c4
commit 131d8b607c
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
2 changed files with 6 additions and 4 deletions

View file

@ -1933,7 +1933,7 @@ func processKaTexMacros(n *ast.Node) {
mathContent = escapeKaTexSupportedFunctions(mathContent)
usedMacros := extractUsedMacros(mathContent, &keys)
for _, usedMacro := range usedMacros {
depth := 1 // Limit KaTex macro maximum recursive parsing depth is 16 https://github.com/siyuan-note/siyuan/issues/10484
depth := 1
expanded := resolveKaTexMacro(usedMacro, &macros, &keys, &depth)
expanded = unescapeKaTexSupportedFunctions(expanded)
mathContent = strings.ReplaceAll(mathContent, usedMacro, expanded)

View file

@ -910,6 +910,11 @@ func init() {
func resolveKaTexMacro(macroName string, macros *map[string]string, keys *[]string, depth *int) string {
v := (*macros)[macroName]
if *depth > 16 {
// Limit KaTex macro maximum recursive parsing depth is 16 https://github.com/siyuan-note/siyuan/issues/10484
return v
}
sort.Slice(*keys, func(i, j int) bool { return len((*keys)[i]) > len((*keys)[j]) })
*depth++
for _, k := range *keys {
@ -919,9 +924,6 @@ func resolveKaTexMacro(macroName string, macros *map[string]string, keys *[]stri
v = unescapeKaTexSupportedFunctions(escaped)
(*macros)[macroName] = v
}
if *depth > 16 {
return v
}
}
return v
}