From 238a69023a3178267bea52dc4c29ab369cf331c7 Mon Sep 17 00:00:00 2001 From: Jakub Warmuz <jakub.warmuz@gmail.com> Date: Mon, 9 Aug 2010 15:46:18 +0200 Subject: [PATCH] Deep copy Field's default value during Packet's fields initialization. The Field's default object used to be shared along instances of the Field, ie.: >>> class A(Packet): ... fields_desc = [IntField('i', None)] ... >>> class B(Packet): ... fields_desc = [PacketListField('a', [], A)] ... >>> B().a is B().a True Fix it, so: >>> B().a is B().a False --- scapy/packet.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scapy/packet.py b/scapy/packet.py index 0accd354..0f834248 100644 --- a/scapy/packet.py +++ b/scapy/packet.py @@ -8,6 +8,7 @@ Packet class. Binding mechanism. fuzz() method. """ import time,itertools,os +import copy from fields import StrField,ConditionalField,Emph,PacketListField from config import conf from base_classes import BasePacket,Gen,SetGen,Packet_metaclass,NewDefaultValues @@ -93,7 +94,7 @@ class Packet(BasePacket): def do_init_fields(self, flist): for f in flist: - self.default_fields[f.name] = f.default + self.default_fields[f.name] = copy.deepcopy(f.default) self.fieldtype[f.name] = f if f.holds_packets: self.packetfields.append(f) -- GitLab