aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Snow <jsnow@redhat.com>2021-06-07 16:06:41 -0400
committerJohn Snow <jsnow@redhat.com>2021-06-18 16:10:07 -0400
commitc83055ef1d47cd03667d7608f3f5ff232484146e (patch)
treec56873d76b3cc6ac3bea60f6daf9d0a9bdc0f18b
parent74688377feb551101f8a3e3de483df56d30299e4 (diff)
downloadqemu-c83055ef1d47cd03667d7608f3f5ff232484146e.zip
qemu-c83055ef1d47cd03667d7608f3f5ff232484146e.tar.gz
qemu-c83055ef1d47cd03667d7608f3f5ff232484146e.tar.bz2
scripts/qmp-shell: Fix empty-transaction invocation
calling "transaction( )" is pointless, but valid. Rework the parser to allow this kind of invocation. This helps clean up exception handling later by removing accidental breakages of the parser that aren't explicitly forbidden. Signed-off-by: John Snow <jsnow@redhat.com> Message-id: 20210607200649.1840382-35-jsnow@redhat.com Signed-off-by: John Snow <jsnow@redhat.com>
-rwxr-xr-xscripts/qmp/qmp-shell14
1 files changed, 8 insertions, 6 deletions
diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell
index 3c32b57..78e4eae 100755
--- a/scripts/qmp/qmp-shell
+++ b/scripts/qmp/qmp-shell
@@ -244,11 +244,14 @@ class QMPShell(qmp.QEMUMonitorProtocol):
cmdargs = re.findall(argument_regex, cmdline)
qmpcmd: QMPMessage
- # Transactional CLI entry/exit:
- if cmdargs[0] == 'transaction(':
+ # Transactional CLI entry:
+ if cmdargs and cmdargs[0] == 'transaction(':
self._transmode = True
+ self._actions = []
cmdargs.pop(0)
- elif cmdargs[0] == ')' and self._transmode:
+
+ # Transactional CLI exit:
+ if cmdargs and cmdargs[0] == ')' and self._transmode:
self._transmode = False
if len(cmdargs) > 1:
msg = 'Unexpected input after close of Transaction sub-shell'
@@ -257,15 +260,14 @@ class QMPShell(qmp.QEMUMonitorProtocol):
'execute': 'transaction',
'arguments': {'actions': self._actions}
}
- self._actions = list()
return qmpcmd
- # Nothing to process?
+ # No args, or no args remaining
if not cmdargs:
return None
- # Parse and then cache this Transactional Action
if self._transmode:
+ # Parse and cache this Transactional Action
finalize = False
action = {'type': cmdargs[0], 'data': {}}
if cmdargs[-1] == ')':