summaryrefslogtreecommitdiffstats
path: root/test/patches/scapy-2.4/cdp.patch
blob: de16f5d50795dc858f35309813ebb0caf7249ae8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
diff --git a/scapy/contrib/cdp.py b/scapy/contrib/cdp.py
index c8b7f106..7b1ff64d 100644
--- a/scapy/contrib/cdp.py
+++ b/scapy/contrib/cdp.py
@@ -102,7 +102,8 @@ def _CDPGuessPayloadClass(p, **kargs):
 class CDPMsgGeneric(Packet):
     name = "CDP Generic Message"
     fields_desc = [ XShortEnumField("type", None, _cdp_tlv_types),
-                    FieldLenField("len", None, "val", "!H"),
+                    FieldLenField("len", None, "val", "!H",
+                                  adjust=lambda pkt, x: x + 4),
                     StrLenField("val", "", length_from=lambda x:x.len - 4) ]
 
 
@@ -178,5 +179,6 @@ class CDPMsgAddr(CDPMsgGeneric):
 class CDPMsgPortID(CDPMsgGeneric):
     name = "Port ID"
     fields_desc = [ XShortEnumField("type", 0x0003, _cdp_tlv_types),
-                    FieldLenField("len", None, "iface", "!H"),
+                    FieldLenField("len", None, "iface", "!H",
+                                  adjust=lambda pkt, x: x + 4),
                     StrLenField("iface", "Port 1", length_from=lambda x:x.len - 4) ]
@@ -319,7 +319,7 @@ class _CDPChecksum:
         This padding is only used for checksum computation.  The original
         packet should not be altered."""
         if len(pkt) % 2:
-            last_chr = pkt[-1]
+            last_chr = pkt[len(pkt)-1:]
             if last_chr <= b'\x80':
                 return pkt[:-1] + b'\x00' + last_chr
             else: