Skip to content

Commit 08725ac

Browse files
authored
Cast and smart pointer improvements. (#1893)
* cpp casts * Changed layerOldData to use unique_ptr
1 parent 6d8b747 commit 08725ac

File tree

1 file changed

+8
-9
lines changed

1 file changed

+8
-9
lines changed

Packet++/src/Packet.cpp

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "Logger.h"
1616
#include <numeric>
1717
#include <sstream>
18+
#include <memory>
1819
#ifdef _MSC_VER
1920
# include <time.h>
2021
# include "SystemUtils.h"
@@ -294,7 +295,7 @@ namespace pcpp
294295

295296
// first, get ptr and data length of the raw packet
296297
const uint8_t* dataPtr = m_RawPacket->getRawData();
297-
size_t dataLen = (size_t)m_RawPacket->getRawDataLen();
298+
size_t dataLen = static_cast<size_t>(m_RawPacket->getRawDataLen());
298299

299300
// if a packet trailer exists, get its length
300301
size_t packetTrailerLen = 0;
@@ -306,7 +307,7 @@ namespace pcpp
306307
while (curLayer != nullptr)
307308
{
308309
// set data ptr to layer
309-
curLayer->m_Data = (uint8_t*)dataPtr;
310+
curLayer->m_Data = const_cast<uint8_t*>(dataPtr);
310311

311312
// there is an assumption here that the packet trailer, if exists, corresponds to the L2 (data link) layers.
312313
// so if there is a packet trailer and this layer is L2 (data link), set its data length to contain the
@@ -427,16 +428,15 @@ namespace pcpp
427428
// before removing the layer's data, copy it so it can be later assigned as the removed layer's data
428429
size_t headerLen = layer->getHeaderLen();
429430
size_t layerOldDataSize = headerLen;
430-
uint8_t* layerOldData = new uint8_t[layerOldDataSize];
431-
memcpy(layerOldData, layer->m_Data, layerOldDataSize);
431+
auto layerOldData = std::make_unique<uint8_t[]>(layerOldDataSize);
432+
memcpy(layerOldData.get(), layer->m_Data, layerOldDataSize);
432433

433434
// remove data from raw packet
434435
size_t numOfBytesToRemove = headerLen;
435436
int indexOfDataToRemove = layer->m_Data - m_RawPacket->getRawData();
436437
if (!m_RawPacket->removeData(indexOfDataToRemove, numOfBytesToRemove))
437438
{
438439
PCPP_LOG_ERROR("Couldn't remove data from packet");
439-
delete[] layerOldData;
440440
return false;
441441
}
442442

@@ -463,15 +463,15 @@ namespace pcpp
463463

464464
// first, get ptr and data length of the raw packet
465465
const uint8_t* dataPtr = m_RawPacket->getRawData();
466-
size_t dataLen = (size_t)m_RawPacket->getRawDataLen();
466+
size_t dataLen = static_cast<size_t>(m_RawPacket->getRawDataLen());
467467

468468
curLayer = m_FirstLayer;
469469

470470
// go over all layers from the first layer to the last layer and set the data ptr and data length for each one
471471
while (curLayer != nullptr)
472472
{
473473
// set data ptr to layer
474-
curLayer->m_Data = (uint8_t*)dataPtr;
474+
curLayer->m_Data = const_cast<uint8_t*>(dataPtr);
475475

476476
// there is an assumption here that the packet trailer, if exists, corresponds to the L2 (data link) layers.
477477
// so if there is a packet trailer and this layer is L2 (data link), set its data length to contain the
@@ -494,14 +494,13 @@ namespace pcpp
494494
if (tryToDelete && layer->m_IsAllocatedInPacket)
495495
{
496496
delete layer;
497-
delete[] layerOldData;
498497
}
499498
// if layer was not allocated by this packet or the tryToDelete is not set, detach it from the packet so it can
500499
// be reused
501500
else
502501
{
503502
layer->m_Packet = nullptr;
504-
layer->m_Data = layerOldData;
503+
layer->m_Data = layerOldData.release();
505504
layer->m_DataLen = layerOldDataSize;
506505
}
507506

0 commit comments

Comments
 (0)