diff -r 7b2e9458bff1 src/network/utils/packetbb.cc --- a/src/network/utils/packetbb.cc Sun Apr 17 20:06:22 2011 -0700 +++ b/src/network/utils/packetbb.cc Mon Apr 18 11:01:02 2011 +0400 @@ -1590,17 +1590,20 @@ void PbbMessageIpv4::SerializeOriginatorAddress (Buffer::Iterator &start) const { - uint8_t buffer[GetAddressLength () + 1]; + uint8_t* buffer = new uint8_t[GetAddressLength () + 1]; Ipv4Address::ConvertFrom (GetOriginatorAddress ()).Serialize(buffer); start.Write (buffer, GetAddressLength () + 1); + delete[] buffer; } Address PbbMessageIpv4::DeserializeOriginatorAddress (Buffer::Iterator &start) const { - uint8_t buffer[GetAddressLength () + 1]; + uint8_t* buffer = new uint8_t[GetAddressLength () + 1]; start.Read(buffer, GetAddressLength () + 1); - return Ipv4Address::Deserialize (buffer); + Address res = Ipv4Address::Deserialize (buffer); + delete[] buffer; + return res; } void @@ -1636,17 +1639,20 @@ void PbbMessageIpv6::SerializeOriginatorAddress (Buffer::Iterator &start) const { - uint8_t buffer[GetAddressLength () + 1]; + uint8_t* buffer = new uint8_t[GetAddressLength () + 1]; Ipv6Address::ConvertFrom (GetOriginatorAddress ()).Serialize(buffer); start.Write (buffer, GetAddressLength () + 1); + delete[] buffer; } Address PbbMessageIpv6::DeserializeOriginatorAddress (Buffer::Iterator &start) const { - uint8_t buffer[GetAddressLength () + 1]; + uint8_t* buffer = new uint8_t[GetAddressLength () + 1]; start.Read(buffer, GetAddressLength () + 1); - return Ipv6Address::Deserialize (buffer); + Address res = Ipv6Address::Deserialize (buffer); + delete[] buffer; + return res; } void @@ -1978,9 +1984,9 @@ } else if (AddressSize () > 0) { - uint8_t head[GetAddressLength ()]; + uint8_t* head = new uint8_t[GetAddressLength ()]; uint8_t headlen = 0; - uint8_t tail[GetAddressLength ()]; + uint8_t* tail = new uint8_t[GetAddressLength ()]; uint8_t taillen = 0; GetHeadTail (head, headlen, tail, taillen); @@ -2003,6 +2009,9 @@ size += (GetAddressLength () - headlen - taillen) * AddressSize (); size += PrefixSize (); + + delete[] head; + delete[] tail; } size += m_addressTlvList.GetSerializedSize (); @@ -2020,7 +2029,7 @@ if (AddressSize () == 1) { - uint8_t buf[GetAddressLength ()]; + uint8_t* buf = new uint8_t[GetAddressLength ()]; SerializeAddress (buf, AddressBegin ()); start.Write (buf, GetAddressLength ()); @@ -2030,11 +2039,12 @@ flags |= AHAS_SINGLE_PRE_LEN; } bufref.WriteU8 (flags); + delete[] buf; } else if (AddressSize () > 0) { - uint8_t head[GetAddressLength ()]; - uint8_t tail[GetAddressLength ()]; + uint8_t* head = new uint8_t[GetAddressLength ()]; + uint8_t* tail = new uint8_t[GetAddressLength ()]; uint8_t headlen = 0; uint8_t taillen = 0; @@ -2064,7 +2074,7 @@ if (headlen + taillen < GetAddressLength ()) { - uint8_t mid[GetAddressLength ()]; + uint8_t* mid = new uint8_t[GetAddressLength ()]; for (PbbAddressBlock::ConstAddressIterator iter = AddressBegin (); iter != AddressEnd (); iter++) @@ -2072,6 +2082,7 @@ SerializeAddress (mid, iter); start.Write (mid + headlen, GetAddressLength () - headlen - taillen); } + delete mid; } flags |= GetPrefixFlags (); @@ -2083,6 +2094,9 @@ { start.WriteU8 (*iter); } + + delete[] head; + delete[] tail; } m_addressTlvList.Serialize (start); @@ -2098,7 +2112,7 @@ { uint8_t headlen = 0; uint8_t taillen = 0; - uint8_t addrtmp[GetAddressLength ()]; + uint8_t* addrtmp = new uint8_t[GetAddressLength ()]; memset(addrtmp, 0, GetAddressLength ()); if (flags & AHAS_HEAD) @@ -2134,6 +2148,8 @@ PrefixPushBack (start.ReadU8 ()); } } + + delete[] addrtmp; } m_addressTlvList.Deserialize (start);