aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Brunet <charles.brunet@optelgroup.com>2023-09-07 15:06:23 -0400
committerNirbheek Chauhan <nirbheek.chauhan@gmail.com>2023-09-13 16:55:38 +0530
commit923b95f3d11141417f27ecbbf43b9ae849dc9e64 (patch)
tree84fbb9fdb6e9dbd686105431ab5bc6064accce0f
parent8caf40e5ae9283f2c463ab8a2ddd829e30d0bf37 (diff)
downloadmeson-923b95f3d11141417f27ecbbf43b9ae849dc9e64.zip
meson-923b95f3d11141417f27ecbbf43b9ae849dc9e64.tar.gz
meson-923b95f3d11141417f27ecbbf43b9ae849dc9e64.tar.bz2
Fix assertion raised with invalid option name
When option name contains more that one dot, it should be detected earlier to prevent an assert to be raised. Fixes #11904.
-rw-r--r--mesonbuild/interpreter/interpreter.py5
-rw-r--r--test cases/common/40 options/meson.build8
2 files changed, 13 insertions, 0 deletions
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index c637087..838ad2f 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -37,6 +37,7 @@ from ..interpreterbase import FeatureNew, FeatureDeprecated, FeatureBroken, Feat
from ..interpreterbase import ObjectHolder, ContextManagerObject
from ..interpreterbase import stringifyUserArguments
from ..modules import ExtensionModule, ModuleObject, MutableModuleObject, NewExtensionModule, NotFoundExtensionModule
+from ..optinterpreter import optname_regex
from . import interpreterobjects as OBJ
from . import compiler as compilerOBJ
@@ -1090,6 +1091,10 @@ class Interpreter(InterpreterBase, HoldableObject):
raise InterpreterException('Having a colon in option name is forbidden, '
'projects are not allowed to directly access '
'options of other subprojects.')
+
+ if optname_regex.search(optname.split('.', maxsplit=1)[-1]) is not None:
+ raise InterpreterException(f'Invalid option name {optname!r}')
+
opt = self.get_option_internal(optname)
if isinstance(opt, coredata.UserFeatureOption):
opt.name = optname
diff --git a/test cases/common/40 options/meson.build b/test cases/common/40 options/meson.build
index a10ff28..de4a7d5 100644
--- a/test cases/common/40 options/meson.build
+++ b/test cases/common/40 options/meson.build
@@ -46,3 +46,11 @@ assert(get_option('wrap_mode') == 'default', 'Wrap mode option is broken.')
assert(get_option('boolean_string') == false)
assert(get_option('boolean_string2') == true)
assert(get_option('integer_string') == 42)
+
+testcase expect_error('Invalid option name \'..invalid\'')
+ get_option('..invalid')
+endtestcase
+
+testcase expect_error('Invalid option name \'this.is.also.invalid\'')
+ get_option('this.is.also.invalid')
+endtestcase