From 6e48ebf44688edfb0dc5a0571e9e320e60d3df42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 5 Nov 2009 19:29:24 +0000 Subject: [PATCH] * "next" & "previous" could be NULL, but were still referenced - based on Oliver's patch for bug #4896 which this one fixes. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33908 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp b/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp index d60110f2fb..e096539c16 100644 --- a/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp +++ b/src/add-ons/kernel/network/protocols/ipv4/ipv4.cpp @@ -338,11 +338,19 @@ FragmentPacket::AddFragment(uint16 start, uint16 end, net_buffer* buffer, status_t status = gBufferModule->merge(buffer, next, true); TRACE(" merge next: %s", strerror(status)); if (status != B_OK) { - fFragments.Insert((net_buffer*)previous->link.next, next); + // Insert "next" at its previous position + if (previous != NULL) + fFragments.Insert((net_buffer*)previous->link.next, next); + else + fFragments.Insert(next); + return status; } - fFragments.Insert((net_buffer*)previous->link.next, buffer); + if (previous != NULL) + fFragments.Insert((net_buffer*)previous->link.next, buffer); + else + fFragments.Insert(buffer); // cut down existing hole fBytesLeft -= end - start;