Skip to content

Commit 3b39b5a

Browse files
authored
be more robust in the presence of lua pattern characters in code cell declarations (#4771)
1 parent 1c0d65b commit 3b39b5a

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

src/resources/filters/qmd-reader.lua

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,21 @@ function escape_invalid_tags(str)
8585
print("Please file a bug at https://github.com/quarto-dev/quarto-cli")
8686
os.exit(1)
8787
end
88-
replacements[replacement] = k
89-
local patterns = {"^([ \t\f\v]*```+[ \t\f\v]*)" .. k, "(\n[ \t\f\v]*```+[ \t\f\v]*)" .. k}
90-
str = str:gsub(patterns[1], "%1" .. replacement):gsub(patterns[2], "%1" .. replacement)
88+
-- replace all lua special pattern characters with their
89+
-- escaped versions
90+
local safe_pattern = k:gsub("([%^%$%(%)%%%.%[%]%*%+%-%?])", "%%%1")
91+
92+
-- replace all lua special replacement characters with their
93+
-- escaped versions
94+
local safe_replacement = k:gsub("([$%%])", "%%%1")
95+
replacements[replacement] = safe_replacement
96+
97+
local patterns = {
98+
"^([ \t\f\v]*```+[ \t\f\v]*)" .. safe_pattern,
99+
"(\n[ \t\f\v]*```+[ \t\f\v]*)" .. safe_pattern
100+
}
101+
102+
str = str:gsub(patterns[1], "%1" .. safe_replacement):gsub(patterns[2], "%1" .. safe_replacement)
91103
end
92104
return str, replacements
93105
end

0 commit comments

Comments
 (0)