Allow turning off geninclude when parsing config

This commit is contained in:
Kovid Goyal 2026-04-26 09:35:37 +05:30
parent f42a5f89c3
commit 54d94d93b0
No known key found for this signature in database
GPG key ID: 06BC317B515ACE7C
2 changed files with 20 additions and 6 deletions

View file

@ -281,6 +281,7 @@ def parse_line(
effective_config_lines: Callable[[str, str], None],
memory: Memory,
accumulate_bad_lines: list[BadLine] | None = None,
allow_geninclude: bool = True,
) -> None:
line = line.strip()
if not line or line.startswith('#'):
@ -302,10 +303,14 @@ def parse_line(
with currently_parsing.set_file(f'<env var: {x}>'):
_parse(
NamedLineIterator(os.path.join(base_path_for_includes, ''), iter(os.environ[x].splitlines())),
parse_conf_item, ans, memory, accumulate_bad_lines, effective_config_lines
parse_conf_item, ans, memory, accumulate_bad_lines, effective_config_lines,
allow_geninclude=allow_geninclude
)
return
elif key == 'geninclude':
if not allow_geninclude:
log_error('Ignoring geninclude directive for security')
return
if not os.path.isabs(val):
val = os.path.join(base_path_for_includes, val)
if not memory.seen(val):
@ -320,7 +325,8 @@ def parse_line(
with currently_parsing.set_file(f'<get: {val}>'):
_parse(
NamedLineIterator(os.path.join(base_path_for_includes, ''), iter(lines)),
parse_conf_item, ans, memory, accumulate_bad_lines, effective_config_lines
parse_conf_item, ans, memory, accumulate_bad_lines, effective_config_lines,
allow_geninclude=allow_geninclude
)
return
else:
@ -333,7 +339,9 @@ def parse_line(
try:
with open(val, encoding='utf-8', errors='replace') as include:
with currently_parsing.set_file(val):
_parse(include, parse_conf_item, ans, memory, accumulate_bad_lines, effective_config_lines)
_parse(
include, parse_conf_item, ans, memory, accumulate_bad_lines, effective_config_lines,
allow_geninclude=allow_geninclude)
except FileNotFoundError:
log_error(f'Could not find included config file: {val}, ignoring')
except OSError:
@ -356,6 +364,7 @@ def _parse(
memory: Memory,
accumulate_bad_lines: list[BadLine] | None = None,
effective_config_lines: Callable[[str, str], None] | None = None,
allow_geninclude: bool = True,
) -> None:
name = getattr(lines, 'name', None)
effective_config_lines = effective_config_lines or (lambda a, b: None)
@ -395,7 +404,7 @@ def _parse(
next_line = ''
try:
with currently_parsing.set_line(line, line_num):
parse_line(line, parse_conf_item, ans, base_path_for_includes, effective_config_lines, memory, accumulate_bad_lines)
parse_line(line, parse_conf_item, ans, base_path_for_includes, effective_config_lines, memory, accumulate_bad_lines, allow_geninclude)
except Exception as e:
if accumulate_bad_lines is None:
raise
@ -410,8 +419,9 @@ def parse_config_base(
ans: dict[str, Any],
accumulate_bad_lines: list[BadLine] | None = None,
effective_config_lines: Callable[[str, str], None] | None = None,
allow_geninclude: bool = True,
) -> None:
_parse(lines, parse_conf_item, ans, Memory(accumulate_bad_lines), accumulate_bad_lines, effective_config_lines)
_parse(lines, parse_conf_item, ans, Memory(accumulate_bad_lines), accumulate_bad_lines, effective_config_lines, allow_geninclude)
def merge_dicts(defaults: dict[str, Any], newvals: dict[str, Any]) -> dict[str, Any]:

View file

@ -142,7 +142,10 @@ def finalize_mouse_mappings(opts: Options, accumulate_bad_lines: list[BadLine] |
def parse_config(
lines: Iterable[str], accumulate_bad_lines: list[BadLine] | None = None, effective_config_lines: Callable[[str, str], None] | None = None
lines: Iterable[str],
accumulate_bad_lines: list[BadLine] | None = None,
effective_config_lines: Callable[[str, str], None] | None = None,
allow_geninclude: bool = True,
) -> dict[str, Any]:
from .options.parse import create_result_dict, parse_conf_item
ans: dict[str, Any] = create_result_dict()
@ -152,6 +155,7 @@ def parse_config(
ans,
accumulate_bad_lines=accumulate_bad_lines,
effective_config_lines=effective_config_lines,
allow_geninclude=allow_geninclude,
)
return ans