Sophie

Sophie

distrib > Mageia > 7 > i586 > media > core-updates-src > by-pkgid > 944cfe666fdb58f5fa2ccc47b6fbc711 > files > 1

scapy-2.4.0-3.1.mga7.src.rpm

diff --git a/scapy/layers/eap.py b/scapy/layers/eap.py
index ecf3837..64f7db2 100644
--- a/scapy/layers/eap.py
+++ b/scapy/layers/eap.py
@@ -16,7 +16,7 @@ from scapy.fields import BitField, ByteField, XByteField, ByteEnumField,\
 ShortField, IntField, XIntField, ByteEnumField, StrLenField, XStrField,\
 XStrLenField, XStrFixedLenField, LenField, FieldLenField, PacketField,\
 PacketListField, ConditionalField, PadField
-from scapy.packet import Packet, bind_layers
+from scapy.packet import Packet, Padding, bind_layers
 from scapy.layers.l2 import SourceMACField, Ether, CookedLinux, GRE, SNAP
 from scapy.utils import issubtype
 from scapy.config import conf
@@ -279,6 +279,9 @@ class EAP(Packet):
             p = p[:2] + chb((l >> 8) & 0xff) + chb(l & 0xff) + p[4:]
         return p + pay
 
+    def guess_payload_class(self, _):
+        return Padding
+
 
 class EAP_MD5(EAP):
     """
diff --git a/scapy/layers/radius.py b/scapy/layers/radius.py
index ac64fe6..7f62ed4 100644
--- a/scapy/layers/radius.py
+++ b/scapy/layers/radius.py
@@ -9,11 +9,10 @@ RADIUS (Remote Authentication Dial In User Service)
 """
 
 import struct
-import logging
 import hashlib
 import hmac
-from scapy.compat import *
-from scapy.packet import Packet, bind_layers
+from scapy.compat import orb, raw
+from scapy.packet import Packet, Padding, bind_layers
 from scapy.fields import ByteField, ByteEnumField, IntField, StrLenField,\
     XStrLenField, XStrFixedLenField, FieldLenField, PacketField,\
     PacketListField, IPField, MultiEnumField
@@ -278,6 +277,8 @@ class RadiusAttribute(Packet):
             p = p[:1] + struct.pack("!B", length) + p[2:]
         return p
 
+    def guess_payload_class(self, _):
+        return Padding
 
 class _SpecificRadiusAttr(RadiusAttribute):
     """
@@ -1055,32 +1056,6 @@ class RadiusAttr_Vendor_Specific(RadiusAttribute):
     ]
 
 
-class _RADIUSAttrPacketListField(PacketListField):
-    """
-    PacketListField handling a list of RADIUS attributes.
-    """
-
-    def getfield(self, pkt, s):
-        lst = []
-        length = None
-        ret = ""
-
-        if self.length_from is not None:
-            length = self.length_from(pkt)
-
-        if length is not None:
-            remain, ret = s[:length], s[length:]
-
-        while remain:
-            attr_len = orb(remain[1])
-            current = remain[:attr_len]
-            remain = remain[attr_len:]
-            packet = self.m2i(pkt, current)
-            lst.append(packet)
-
-        return remain + ret, lst
-
-
 # See IANA RADIUS Packet Type Codes registry
 _packet_codes = {
     1: "Access-Request",
@@ -1145,7 +1120,7 @@ class Radius(Packet):
             adjust=lambda pkt, x: len(pkt.attributes) + 20
         ),
         XStrFixedLenField("authenticator", "", 16),
-        _RADIUSAttrPacketListField(
+        PacketListField(
             "attributes",
             [],
             RadiusAttribute,
diff --git a/test/regression.uts b/test/regression.uts
index 9e1b2d8..4dfb5ce 100644
--- a/test/regression.uts
+++ b/test/regression.uts
@@ -7185,6 +7185,10 @@ l = PacketList(p)
 s = l.sessions()  # Crashed on commit: e42ecdc54556c4852ca06b1a6da6c1ccbf3f522e
 assert len(s) == 1
 
+= Issue GH#1407
+s = b"Z\xa5\xaaUZ\xa5\xaaU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe9\xc5\x00\x00\x14'\x02\x00\x00\x001\x9a\xe44\xea4"
+isinstance(Radius(s), Radius)
+
 
 ############
 ############