Skip to content

Commit c04c26f

Browse files
committed
lsp: Ensure filepaths are properly escaped
Backslashes in Windows filepaths can cause issues ```python >>> import re >>> VARIABLE = re.compile(r"\$\{(\w+)\}") >>> VARIABLE.sub('\\path\\to\\cache', '${defaultBuildDir}/doctrees') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib64/python3.12/re/__init__.py", line 334, in _compile_template return _sre.template(pattern, _parser.parse_template(repl, pattern)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib64/python3.12/re/_parser.py", line 1075, in parse_template raise s.error('bad escape %s' % this, len(this)) from None re.error: bad escape \p at position 0 ``` Calling `re.escape` on the replacement ensures that characters like backslashes are escaped correctly ```python >>> VARIABLE.sub(re.escape('\\path\\to\\cache'), '${defaultBuildDir}/doctrees') '\\path\\to\\cache/doctrees' >>> ```
1 parent 1bbf418 commit c04c26f

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

lib/esbonio/esbonio/sphinx_agent/config.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,9 @@ def to_application_args(self, context: dict[str, Any]) -> dict[str, Any]:
160160
continue
161161

162162
replacement = self.resolve_config_variable(match.group(1), context)
163-
setattr(self, name, VARIABLE.sub(replacement, value))
163+
result = VARIABLE.sub(re.escape(replacement), value)
164+
165+
setattr(self, name, result)
164166

165167
build_dir = pathlib.Path(self.build_dir).resolve()
166168
doctree_dir = pathlib.Path(self.doctree_dir).resolve()

0 commit comments

Comments
 (0)