diff -r 7b2e9458bff1 src/internet/model/icmpv6-header.cc --- a/src/internet/model/icmpv6-header.cc Sun Apr 17 20:06:22 2011 -0700 +++ b/src/internet/model/icmpv6-header.cc Mon Apr 18 11:23:57 2011 +0400 @@ -1008,7 +1008,7 @@ uint32_t Icmpv6DestinationUnreachable::Deserialize (Buffer::Iterator start) { uint16_t length = start.GetSize () - 8; - uint8_t data[length]; + uint8_t* data = new uint8_t[length]; Buffer::Iterator i = start; SetType (i.ReadU8 ()); @@ -1018,6 +1018,7 @@ i.Read (data, length); m_packet = Create (data, length); + delete[] data; return GetSerializedSize (); } @@ -1106,7 +1107,7 @@ uint32_t Icmpv6TooBig::Deserialize (Buffer::Iterator start) { uint16_t length = start.GetSize () - 8; - uint8_t data[length]; + uint8_t* data = new uint8_t[length]; Buffer::Iterator i = start; SetType (i.ReadU8 ()); @@ -1116,6 +1117,7 @@ i.Read (data, length); m_packet = Create (data, length); + delete[] data; return GetSerializedSize (); } @@ -1193,7 +1195,7 @@ uint32_t Icmpv6TimeExceeded::Deserialize (Buffer::Iterator start) { uint16_t length = start.GetSize () - 8; - uint8_t data[length]; + uint8_t* data = new uint8_t[length]; Buffer::Iterator i = start; SetType (i.ReadU8 ()); @@ -1203,6 +1205,7 @@ i.Read (data, length); m_packet = Create (data, length); + delete[] data; return GetSerializedSize (); } @@ -1291,7 +1294,7 @@ uint32_t Icmpv6ParameterError::Deserialize (Buffer::Iterator start) { uint16_t length = start.GetSize () - 8; - uint8_t data[length]; + uint8_t* data = new uint8_t[length]; Buffer::Iterator i = start; SetType (i.ReadU8 ()); @@ -1300,6 +1303,7 @@ SetPtr (i.ReadNtohU32 ()); i.Read (data, length); m_packet = Create (data, length); + delete[] data; return GetSerializedSize (); } @@ -1777,9 +1781,10 @@ i.ReadU32 (); uint32_t len2 = (GetLength () - 1) * 8; - uint8_t buff[len2]; + uint8_t* buff = new uint8_t[len2]; i.Read (buff, len2); m_packet = Create (buff, len2); + delete[] buff; return GetSerializedSize (); } diff -r 7b2e9458bff1 src/internet/model/icmpv6-l4-protocol.cc --- a/src/internet/model/icmpv6-l4-protocol.cc Sun Apr 17 20:06:22 2011 -0700 +++ b/src/internet/model/icmpv6-l4-protocol.cc Mon Apr 18 11:23:57 2011 +0400 @@ -232,7 +232,7 @@ { NS_LOG_FUNCTION (this << packet << src << dst << interface); Icmpv6Echo request; - uint8_t buf[packet->GetSize ()]; + uint8_t* buf = new uint8_t[packet->GetSize ()]; packet->RemoveHeader (request); /* XXX IPv6 extension: obtain a fresh copy of data otherwise it crash... */ @@ -241,6 +241,7 @@ /* if we send message from ff02::* (link-local multicast), we use our link-local address */ SendEchoReply (dst.IsMulticast () ? interface->GetLinkLocalAddress ().GetAddress () : dst, src, request.GetId (), request.GetSeq (), p); + delete[] buf; } void Icmpv6L4Protocol::HandleRA (Ptr packet, Ipv6Address const &src, Ipv6Address const &dst, Ptr interface) diff -r 7b2e9458bff1 src/internet/model/ipv6-extension-header.cc --- a/src/internet/model/ipv6-extension-header.cc Sun Apr 17 20:06:22 2011 -0700 +++ b/src/internet/model/ipv6-extension-header.cc Mon Apr 18 11:23:57 2011 +0400 @@ -102,7 +102,7 @@ m_length = i.ReadU8 (); uint32_t dataLength = GetLength () - 2; - uint8_t data[dataLength]; + uint8_t* data = new uint8_t[dataLength]; i.Read (data, dataLength); if (dataLength > m_data.GetSize ()) @@ -117,6 +117,7 @@ i = m_data.Begin (); i.Write (data, dataLength); + delete[] data; return GetSerializedSize (); } @@ -152,11 +153,12 @@ uint32_t OptionField::Deserialize (Buffer::Iterator start, uint32_t length) { - uint8_t buf[length]; + uint8_t* buf = new uint8_t[length]; start.Read (buf, length); m_optionData = Buffer (); m_optionData.AddAtEnd (length); m_optionData.Begin ().Write (buf, length); + delete[] buf; return length; }