diff --git a/scapy/asn1packet.py b/scapy/asn1packet.py index 460decb33be0c001d8e7f178219e117239580d8e..4c476d2a5f52e66f701450ffc4aefb475f10c0cc 100644 --- a/scapy/asn1packet.py +++ b/scapy/asn1packet.py @@ -17,6 +17,8 @@ class ASN1_Packet(Packet): self.do_init_fields(flist) self.fields_desc = flist def self_build(self): + if self.raw_packet_cache is not None: + return self.raw_packet_cache return self.ASN1_root.build(self) def do_dissect(self, x): return self.ASN1_root.dissect(self, x) diff --git a/scapy/packet.py b/scapy/packet.py index 1c530ba43332007d21f12dc0b9083d46fbd61ad6..6c2094f27b2000de5923ffe0ec19e351f79de8da 100644 --- a/scapy/packet.py +++ b/scapy/packet.py @@ -296,6 +296,8 @@ class Packet(BasePacket): def __len__(self): return len(self.__str__()) def self_build(self, field_pos_list=None): + if self.raw_packet_cache is not None: + return self.raw_packet_cache p="" for f in self.fields_desc: val = self.getfieldval(f.name) @@ -314,10 +316,7 @@ class Packet(BasePacket): def do_build(self): if not self.explicit: self = self.__iter__().next() - if self.raw_packet_cache is None: - pkt = self.self_build() - else: - pkt = self.raw_packet_cache + pkt = self.self_build() for t in self.post_transforms: pkt = t(pkt) pay = self.do_build_payload() @@ -1148,7 +1147,8 @@ class Padding(Raw): def self_build(self): return "" def build_padding(self): - return self.load+self.payload.build_padding() + return (self.load if self.raw_packet_cache is None + else self.raw_packet_cache) + self.payload.build_padding() conf.raw_layer = Raw conf.padding_layer = Padding