From d5e4a897680762663fd14993a4f2c9691675ec29 Mon Sep 17 00:00:00 2001
From: Guillaume Valadon <guillaume@valadon.net>
Date: Wed, 7 Aug 2013 10:13:46 +0200
Subject: [PATCH] Issue #600: Fragmenting long IPv6 packet produces deprecation
 warnings

--HG--
branch : Issue #600
---
 scapy/layers/inet6.py | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/scapy/layers/inet6.py b/scapy/layers/inet6.py
index bd2122ef..b7dcb416 100644
--- a/scapy/layers/inet6.py
+++ b/scapy/layers/inet6.py
@@ -958,10 +958,6 @@ def fragment6(pkt, fragSize):
     """
 
     pkt = pkt.copy()
-    s = str(pkt) # for instantiation to get upper layer checksum right
-
-    if len(s) <= fragSize:
-        return [pkt]
 
     if not IPv6ExtHdrFragment in pkt:
         # TODO : automatically add a fragment before upper Layer
@@ -969,6 +965,15 @@ def fragment6(pkt, fragSize):
         #        as single element of a list
         return [pkt]
 
+    # If the payload is bigger than 65535, IPv6().post_build() will throw an exception
+    if len(str(pkt[IPv6ExtHdrFragment])) > 65535:
+      pkt[IPv6].plen = 65535
+    
+    s = str(pkt) # for instantiation to get upper layer checksum right
+
+    if len(s) <= fragSize:
+        return [pkt]
+
     # Fragmentable part : fake IPv6 for Fragmentable part length computation
     fragPart = pkt[IPv6ExtHdrFragment].payload
     tmp = str(IPv6(src="::1", dst="::1")/fragPart)
-- 
GitLab