From b529c0155f12309f4ac59d7a6e93cb5d630132c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9my=20L=C3=A9one?= <remy.leone@gmail.com>
Date: Thu, 12 May 2016 15:37:57 +0200
Subject: [PATCH] Default argument shouldn't be mutable

---
 scapy/arch/windows/__init__.py |  4 +++-
 scapy/asn1/mib.py              |  4 +++-
 scapy/contrib/carp.py          |  6 +++++-
 scapy/contrib/isis.py          |  4 +++-
 scapy/contrib/ospf.py          | 16 ++++++++++++----
 scapy/modules/voip.py          |  8 ++++++--
 6 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/scapy/arch/windows/__init__.py b/scapy/arch/windows/__init__.py
index 44f3569b..e8f4fbce 100755
--- a/scapy/arch/windows/__init__.py
+++ b/scapy/arch/windows/__init__.py
@@ -131,8 +131,10 @@ def exec_query(cmd, fields):
     return _exec_query_ps(cmd, fields)
 
 
-def _where(filename, dirs=[], env="PATH"):
+def _where(filename, dirs=None, env="PATH"):
     """Find file in current dir or system path"""
+    if dirs is None:
+        dirs = []
     if not isinstance(dirs, list):
         dirs = [dirs]
     if glob(filename):
diff --git a/scapy/asn1/mib.py b/scapy/asn1/mib.py
index c3aa59c1..a77bbe84 100644
--- a/scapy/asn1/mib.py
+++ b/scapy/asn1/mib.py
@@ -50,7 +50,9 @@ class MIBDict(DADict):
             return x
         xl[p] = self[xl[p]] 
         return ".".join(xl[p:])
-    def _make_graph(self, other_keys=[], **kargs):
+    def _make_graph(self, other_keys=None, **kargs):
+        if other_keys is None:
+            other_keys = []
         nodes = [(k, self[k]) for k in self.iterkeys()]
         oids = [self[k] for k in self.iterkeys()]
         for k in other_keys:
diff --git a/scapy/contrib/carp.py b/scapy/contrib/carp.py
index e785adef..3831aae4 100644
--- a/scapy/contrib/carp.py
+++ b/scapy/contrib/carp.py
@@ -33,7 +33,11 @@ class CARP(Packet):
 
         return pkt
 
-def build_hmac_sha1(pkt, pw = '\0' * 20, ip4l = [], ip6l = []):
+def build_hmac_sha1(pkt, pw = '\0' * 20, ip4l=None, ip6l=None):
+    if ip4l is None:
+        ip4l = []
+    if ip6l is None:
+        ip6l = []
     if not pkt.haslayer(CARP):
         return None 
 
diff --git a/scapy/contrib/isis.py b/scapy/contrib/isis.py
index 39fbe90d..34325657 100644
--- a/scapy/contrib/isis.py
+++ b/scapy/contrib/isis.py
@@ -211,8 +211,10 @@ class ISIS_LspIdField(_ISIS_IdFieldBase):
 
 class ISIS_CircuitTypeField(FlagsField):
     def __init__(self, name="circuittype", default=2, size=8,
-                 names=["L1", "L2", "r0", "r1", "r2", "r3", "r4", "r5"]):
+                 names=None):
         FlagsField.__init__(self, name, default, size, names)
+        if names is None:
+            names = ["L1", "L2", "r0", "r1", "r2", "r3", "r4", "r5"]
 
 
 #######################################################################
diff --git a/scapy/contrib/ospf.py b/scapy/contrib/ospf.py
index dc2fca1f..66c79b3e 100644
--- a/scapy/contrib/ospf.py
+++ b/scapy/contrib/ospf.py
@@ -32,8 +32,10 @@ EXT_VERSION = "v0.9.2"
 class OSPFOptionsField(FlagsField):
 
     def __init__(self, name="options", default=0, size=8,
-                 names=["MT", "E", "MC", "NP", "L", "DC", "O", "DN"]):
+                 names=None):
         FlagsField.__init__(self, name, default, size, names)
+        if names is None:
+            names = ["MT", "E", "MC", "NP", "L", "DC", "O", "DN"]
 
 
 _OSPF_types = {1: "Hello",
@@ -127,8 +129,10 @@ class LLS_Generic_TLV(Packet):
 class LLS_ExtendedOptionsField(FlagsField):
 
     def __init__(self, name="options", default=0, size=32,
-                 names=["LR", "RS"]):
+                 names=None):
         FlagsField.__init__(self, name, default, size, names)
+        if names is None:
+            names = ["LR", "RS"]
 
 
 class LLS_Extended_Options(LLS_Generic_TLV):
@@ -452,8 +456,10 @@ class OSPFv3_Hdr(Packet):
 class OSPFv3OptionsField(FlagsField):
 
     def __init__(self, name="options", default=0, size=24,
-                 names=["V6", "E", "MC", "N", "R", "DC", "AF", "L", "I", "F"]):
+                 names=None):
         FlagsField.__init__(self, name, default, size, names)
+        if names is None:
+            names = ["V6", "E", "MC", "N", "R", "DC", "AF", "L", "I", "F"]
 
 
 class OSPFv3_Hello(Packet):
@@ -567,8 +573,10 @@ class OSPFv3_Network_LSA(OSPF_BaseLSA):
 class OSPFv3PrefixOptionsField(FlagsField):
 
     def __init__(self, name="prefixoptions", default=0, size=8,
-                 names=["NU", "LA", "MC", "P"]):
+                 names=None):
         FlagsField.__init__(self, name, default, size, names)
+        if names is None:
+            names = ["NU", "LA", "MC", "P"]
 
 
 class OSPFv3_Inter_Area_Prefix_LSA(OSPF_BaseLSA):
diff --git a/scapy/modules/voip.py b/scapy/modules/voip.py
index b2542b4d..de9ed1d3 100644
--- a/scapy/modules/voip.py
+++ b/scapy/modules/voip.py
@@ -48,7 +48,9 @@ def voip_play(s1,list=None,**kargs):
         fcntl.fcntl(c2.fileno(),fcntl.F_SETFL, os.O_NONBLOCK)
     
     #    dsp,rd = os.popen2("sox -t .ul -c 2 - -t ossdsp /dev/dsp")
-        def play(pkt,last=[]):
+        def play(pkt, last=None):
+            if last is None:
+                last = []
             if not pkt:
                 return 
             if not pkt.haslayer(UDP):
@@ -105,7 +107,9 @@ def voip_play1(s1,list=None,**kargs):
 
 def voip_play2(s1,**kargs):
     dsp,rd = os.popen2("sox -t .ul -c 2 - -t ossdsp /dev/dsp")
-    def play(pkt,last=[]):
+    def play(pkt, last=None):
+        if last is None:
+            last = []
         if not pkt:
             return 
         if not pkt.haslayer(UDP):
-- 
GitLab