aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorMarkus Armbruster <armbru@redhat.com>2021-03-23 10:40:04 +0100
committerMarkus Armbruster <armbru@redhat.com>2021-03-23 22:29:37 +0100
commitdbfe3c7c289c6b95a920b4e2a178e583c17c62a8 (patch)
tree6be7de08ba3bbd26d6fec0524ee6fc0933d2ae09 /scripts
parent73c40b07c6fffcb2725f4c9d3f361967e39aef97 (diff)
downloadqemu-dbfe3c7c289c6b95a920b4e2a178e583c17c62a8.zip
qemu-dbfe3c7c289c6b95a920b4e2a178e583c17c62a8.tar.gz
qemu-dbfe3c7c289c6b95a920b4e2a178e583c17c62a8.tar.bz2
qapi: Fix to reject optional members with reserved names
check_type() fails to reject optional members with reserved names, because it neglects to strip off the leading '*'. Fix that. The stripping in check_name_str() is now useless. Drop. Also drop the "no leading '*'" assertion, because valid_name.match() ensures it can't fail. Fixes: 9fb081e0b98409556d023c7193eeb68947cd1211 Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20210323094025.3569441-8-armbru@redhat.com> Reviewed-by: John Snow <jsnow@redhat.com>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/qapi/expr.py9
1 files changed, 4 insertions, 5 deletions
diff --git a/scripts/qapi/expr.py b/scripts/qapi/expr.py
index 2fcaaa2..cf09fa9 100644
--- a/scripts/qapi/expr.py
+++ b/scripts/qapi/expr.py
@@ -34,12 +34,10 @@ def check_name_is_str(name, info, source):
def check_name_str(name, info, source,
- allow_optional=False, enum_member=False,
+ enum_member=False,
permit_upper=False):
membername = name
- if allow_optional and name.startswith('*'):
- membername = name[1:]
# Enum members can start with a digit, because the generated C
# code always prefixes it with the enum name
if enum_member and membername[0].isdigit():
@@ -52,7 +50,6 @@ def check_name_str(name, info, source,
if not permit_upper and name.lower() != name:
raise QAPISemError(
info, "%s uses uppercase in name" % source)
- assert not membername.startswith('*')
def check_defn_name_str(name, info, meta):
@@ -171,8 +168,10 @@ def check_type(value, info, source,
# value is a dictionary, check that each member is okay
for (key, arg) in value.items():
key_source = "%s member '%s'" % (source, key)
+ if key.startswith('*'):
+ key = key[1:]
check_name_str(key, info, key_source,
- allow_optional=True, permit_upper=permit_upper)
+ permit_upper=permit_upper)
if c_name(key, False) == 'u' or c_name(key, False).startswith('has_'):
raise QAPISemError(info, "%s uses reserved name" % key_source)
check_keys(arg, info, key_source, ['type'], ['if', 'features'])