[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 02/15] qemu|qtest: Avoid dangerous arguments
From: |
Eduardo Habkost |
Subject: |
[Qemu-devel] [PULL 02/15] qemu|qtest: Avoid dangerous arguments |
Date: |
Fri, 15 Sep 2017 20:37:26 -0300 |
From: Lukáš Doktor <address@hidden>
The list object is mutable in python and potentially might modify other
object's arguments when used as default argument. Reproducer:
>>> vm1 = QEMUMachine("qemu")
>>> vm2 = QEMUMachine("qemu")
>>> vm1._wrapper.append("foo")
>>> print vm2._wrapper
['foo']
In this case the `args` is actually copied so it would be safe to keep
it, but it's not a good practice to keep it. The same issue applies in
inherited qtest module.
Signed-off-by: Lukáš Doktor <address@hidden>
Reviewed-by: Eduardo Habkost <address@hidden>
Reviewed-by: John Snow <address@hidden>
Message-Id: <address@hidden>
Reviewed-by: Cleber Rosa <address@hidden>
Signed-off-by: Eduardo Habkost <address@hidden>
---
scripts/qemu.py | 6 +++++-
scripts/qtest.py | 2 +-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/scripts/qemu.py b/scripts/qemu.py
index b45e691538..afd98a290e 100644
--- a/scripts/qemu.py
+++ b/scripts/qemu.py
@@ -30,7 +30,7 @@ class QEMUMachine(object):
# vm is guaranteed to be shut down here
'''
- def __init__(self, binary, args=[], wrapper=[], name=None,
+ def __init__(self, binary, args=None, wrapper=None, name=None,
test_dir="/var/tmp", monitor_address=None,
socket_scm_helper=None, debug=False):
'''
@@ -46,6 +46,10 @@ class QEMUMachine(object):
@param debug: enable debug mode
@note: Qemu process is not started until launch() is used.
'''
+ if args is None:
+ args = []
+ if wrapper is None:
+ wrapper = []
if name is None:
name = "qemu-%d" % os.getpid()
if monitor_address is None:
diff --git a/scripts/qtest.py b/scripts/qtest.py
index d5aecb5f49..ab183c0635 100644
--- a/scripts/qtest.py
+++ b/scripts/qtest.py
@@ -79,7 +79,7 @@ class QEMUQtestProtocol(object):
class QEMUQtestMachine(qemu.QEMUMachine):
'''A QEMU VM'''
- def __init__(self, binary, args=[], name=None, test_dir="/var/tmp",
+ def __init__(self, binary, args=None, name=None, test_dir="/var/tmp",
socket_scm_helper=None):
if name is None:
name = "qemu-%d" % os.getpid()
--
2.13.5
- [Qemu-devel] [PULL 00/15] Python queue, 2017-09-15, Eduardo Habkost, 2017/09/15
- [Qemu-devel] [PULL 01/15] qemu.py: Pylint/style fixes, Eduardo Habkost, 2017/09/15
- [Qemu-devel] [PULL 02/15] qemu|qtest: Avoid dangerous arguments,
Eduardo Habkost <=
- [Qemu-devel] [PULL 03/15] qemu.py: Use iteritems rather than keys(), Eduardo Habkost, 2017/09/15
- [Qemu-devel] [PULL 04/15] qemu.py: Simplify QMP key-conversion, Eduardo Habkost, 2017/09/15
- [Qemu-devel] [PULL 05/15] qemu.py: Use custom exceptions rather than Exception, Eduardo Habkost, 2017/09/15
- [Qemu-devel] [PULL 07/15] qmp.py: Use object-based class for QEMUMonitorProtocol, Eduardo Habkost, 2017/09/15
- [Qemu-devel] [PULL 06/15] qmp.py: Couple of pylint/style fixes, Eduardo Habkost, 2017/09/15
- [Qemu-devel] [PULL 08/15] qmp.py: Avoid "has_key" usage, Eduardo Habkost, 2017/09/15
- [Qemu-devel] [PULL 09/15] qmp.py: Avoid overriding a builtin object, Eduardo Habkost, 2017/09/15
- [Qemu-devel] [PULL 10/15] qtest.py: Few pylint/style fixes, Eduardo Habkost, 2017/09/15
- [Qemu-devel] [PULL 11/15] qemu.py: fix is_running() return before first launch(), Eduardo Habkost, 2017/09/15
- [Qemu-devel] [PULL 12/15] qemu.py: avoid writing to stdout/stderr, Eduardo Habkost, 2017/09/15