diff mbox

[v6,02/10] qemu|qtest: Avoid dangerous arguments

Message ID 20170818142613.32394-3-ldoktor@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Lukáš Doktor Aug. 18, 2017, 2:26 p.m. UTC
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 <ldoktor@redhat.com>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
---
 scripts/qemu.py  | 6 +++++-
 scripts/qtest.py | 2 +-
 2 files changed, 6 insertions(+), 2 deletions(-)

Comments

Cleber Rosa Aug. 24, 2017, 10:55 p.m. UTC | #1
On 08/18/2017 10:26 AM, Lukáš Doktor wrote:
> 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 <ldoktor@redhat.com>
> Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
> Reviewed-by: John Snow <jsnow@redhat.com>
> ---
>  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 dd679f1..5d09de4 100644
> --- a/scripts/qemu.py
> +++ b/scripts/qemu.py
> @@ -23,7 +23,7 @@ import qmp.qmp
>  class QEMUMachine(object):
>      '''A QEMU VM'''
>  
> -    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):
>          '''
> @@ -39,6 +39,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 d5aecb5..ab183c0 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()
> 

Reviewed-by: Cleber Rosa <crosa@redhat.com>
diff mbox

Patch

diff --git a/scripts/qemu.py b/scripts/qemu.py
index dd679f1..5d09de4 100644
--- a/scripts/qemu.py
+++ b/scripts/qemu.py
@@ -23,7 +23,7 @@  import qmp.qmp
 class QEMUMachine(object):
     '''A QEMU VM'''
 
-    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):
         '''
@@ -39,6 +39,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 d5aecb5..ab183c0 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()