Skip to content

Commit

Permalink
qapi/parser: Fix token membership tests when token can be None
Browse files Browse the repository at this point in the history
When the token can be None (EOF), we can't use 'x in "abc"' style
membership tests to group types of tokens together, because 'None in
"abc"' is a TypeError.

Easy enough to fix. (Use a tuple: It's neither a static typing error nor
a runtime error to check for None in Tuple[str, ...])

Add tests to prevent a regression. (Note: they cannot be added prior to
this fix, as the unhandled stack trace will not match test output in the
CI system.)

Signed-off-by: John Snow <jsnow@redhat.com>
Message-Id: <20210519183951.3946870-11-jsnow@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
  • Loading branch information
jnsnow authored and Markus Armbruster committed May 20, 2021
1 parent e0e8a0a commit c256263
Show file tree
Hide file tree
Showing 8 changed files with 9 additions and 2 deletions.
5 changes: 3 additions & 2 deletions scripts/qapi/parser.py
Expand Up @@ -275,7 +275,7 @@ def get_values(self):
if self.tok == ']':
self.accept()
return expr
if self.tok not in "{['tf":
if self.tok not in tuple("{['tf"):
raise QAPIParseError(
self, "expected '{', '[', ']', string, or boolean")
while True:
Expand All @@ -294,7 +294,8 @@ def get_expr(self):
elif self.tok == '[':
self.accept()
expr = self.get_values()
elif self.tok in "'tf":
elif self.tok in tuple("'tf"):
assert isinstance(self.val, (str, bool))
expr = self.val
self.accept()
else:
Expand Down
2 changes: 2 additions & 0 deletions tests/qapi-schema/meson.build
Expand Up @@ -134,9 +134,11 @@ schemas = [
'indented-expr.json',
'leading-comma-list.json',
'leading-comma-object.json',
'missing-array-rsqb.json',
'missing-colon.json',
'missing-comma-list.json',
'missing-comma-object.json',
'missing-object-member-element.json',
'missing-type.json',
'nested-struct-data.json',
'nested-struct-data-invalid-dict.json',
Expand Down
1 change: 1 addition & 0 deletions tests/qapi-schema/missing-array-rsqb.err
@@ -0,0 +1 @@
missing-array-rsqb.json:1:44: expected '{', '[', string, or boolean
1 change: 1 addition & 0 deletions tests/qapi-schema/missing-array-rsqb.json
@@ -0,0 +1 @@
['Daisy,', 'Daisy,', 'Give me your answer',
Empty file.
1 change: 1 addition & 0 deletions tests/qapi-schema/missing-object-member-element.err
@@ -0,0 +1 @@
missing-object-member-element.json:1:8: expected '{', '[', string, or boolean
1 change: 1 addition & 0 deletions tests/qapi-schema/missing-object-member-element.json
@@ -0,0 +1 @@
{'key':
Empty file.

0 comments on commit c256263

Please sign in to comment.