Skip to content

Commit

Permalink
Merge branch 'dev' into bump_ubuntu
Browse files Browse the repository at this point in the history
  • Loading branch information
clementperon committed Jun 5, 2024
2 parents cba877b + df105a7 commit bd4f74b
Show file tree
Hide file tree
Showing 20 changed files with 794 additions and 92 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build_and_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,7 @@ jobs:
uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0

- name: Setup MSYS2
uses: msys2/setup-msys2@cc11e9188b693c2b100158c3322424c4cc1dadea # v2.22.0
uses: msys2/setup-msys2@d0e80f58dffbc64f6a3a1f43527d469b4fc7b6c8 # v2.23.0
with:
msystem: ${{matrix.sys}}
install: >-
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/cifuzz.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
dry-run: false
sanitizer: ${{ matrix.sanitizer }}
- name: Upload Crash
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
if: failure() && steps.build.outcome == 'success'
with:
name: artifacts
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ jobs:
uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0

- name: Setup MSYS2
uses: msys2/setup-msys2@cc11e9188b693c2b100158c3322424c4cc1dadea # v2.22.0
uses: msys2/setup-msys2@d0e80f58dffbc64f6a3a1f43527d469b4fc7b6c8 # v2.23.0
with:
msystem: ${{matrix.sys}}
update: true
Expand Down Expand Up @@ -290,7 +290,7 @@ jobs:
mkdir -p "android-package"
mv "${COMBINED_PACKAGE_DIR}" "android-package"
- uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
- uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3
with:
path: android-package
name: android-package-${{ matrix.target }}-${{ matrix.api-version }}
Expand Down
7 changes: 7 additions & 0 deletions 3rdParty/LightPcapNg/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,13 @@ add_library(

target_compile_definitions(light_pcapng PUBLIC -DUNIVERSAL)

# FIXME: https://github.com/seladb/PcapPlusPlus/issues/1347
include(CheckCCompilerFlag)
check_c_compiler_flag(-Wincompatible-pointer-types HAVE_W_INCOMPATIBLE_POINTER_TYPES)
if(HAVE_W_INCOMPATIBLE_POINTER_TYPES)
target_compile_options(light_pcapng PRIVATE -Wno-incompatible-pointer-types)
endif()

if(BUILD_SHARED_LIBS)
set_property(TARGET light_pcapng PROPERTY POSITION_INDEPENDENT_CODE ON)
endif()
Expand Down
26 changes: 22 additions & 4 deletions Common++/header/IpUtils.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,22 +62,40 @@ namespace pcpp
* Extract IPv4 address from sockaddr
* @param[in] sa - input sockaddr
* @return Address in in_addr format
* @throws std::invalid_argument Sockaddr family is not AF_INET or sockaddr is nullptr.
*/
in_addr* sockaddr2in_addr(struct sockaddr *sa);
in_addr* sockaddr2in_addr(sockaddr* sa);

/**
* Attempt to extract IPv4 address from sockaddr
* @param[in] sa - input sockaddr
* @return Pointer to address in in_addr format or nullptr if extraction fails.
*/
in_addr* try_sockaddr2in_addr(sockaddr* sa);

/**
* Extract IPv6 address from sockaddr
* @param[in] sa - input sockaddr
* @return Address in in6_addr format
* @throws std::invalid_argument Sockaddr family is not AF_INET6 or sockaddr is nullptr.
*/
in6_addr* sockaddr2in6_addr(sockaddr* sa);

/**
* Attempt to extract IPv6 address from sockaddr
* @param[in] sa - input sockaddr
* @return Pointer to address in in6_addr format or nullptr if extraction fails.
*/
in6_addr* sockaddr2in6_addr(struct sockaddr *sa);
in6_addr* try_sockaddr2in6_addr(sockaddr* sa);

/**
* Converts a sockaddr format address to its string representation
* @param[in] sa Address in sockaddr format
* @param[out] resultString String representation of the address
* @param[out] resultString String representation of the address
* @param[in] resultBufLen Length of the result buffer.
* @throws std::invalid_argument Sockaddr family is not AF_INET or AF_INET6, sockaddr is nullptr or the result str buffer is insufficient.
*/
void sockaddr2string(struct sockaddr *sa, char* resultString);
void sockaddr2string(sockaddr const* sa, char* resultString, size_t resultBufLen);

/**
* Convert a in_addr format address to 32bit representation
Expand Down
86 changes: 69 additions & 17 deletions Common++/src/IpUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "Logger.h"
#include <string.h>
#include <stdio.h>
#include <stdexcept>
#ifndef NS_INADDRSZ
#define NS_INADDRSZ 4
#endif
Expand All @@ -18,36 +19,87 @@ namespace pcpp
{
namespace internal
{
in_addr* sockaddr2in_addr(struct sockaddr* sa)
in_addr* sockaddr2in_addr(sockaddr* sa)
{
if (sa == nullptr)
throw std::invalid_argument("sockaddr is nullptr");

if (sa->sa_family != AF_INET)
throw std::invalid_argument("sockaddr family is not AF_INET.");

return &(reinterpret_cast<sockaddr_in*>(sa)->sin_addr);
}

in_addr* try_sockaddr2in_addr(sockaddr* sa)
{
try
{
return sockaddr2in_addr(sa);
}
catch (const std::invalid_argument& e)
{
PCPP_LOG_DEBUG("Extraction failed: " << e.what() << " Returning nullptr.");
return nullptr;
if (sa->sa_family == AF_INET)
return &(((struct sockaddr_in*)sa)->sin_addr);
PCPP_LOG_DEBUG("sockaddr family is not AF_INET. Returning NULL");
return nullptr;
}
}

in6_addr* sockaddr2in6_addr(struct sockaddr* sa)
in6_addr* sockaddr2in6_addr(sockaddr* sa)
{
if (sa->sa_family == AF_INET6)
return &(((struct sockaddr_in6*)sa)->sin6_addr);
PCPP_LOG_DEBUG("sockaddr family is not AF_INET6. Returning NULL");
return nullptr;
if (sa == nullptr)
throw std::invalid_argument("sockaddr is nullptr");

if (sa->sa_family != AF_INET6)
throw std::invalid_argument("sockaddr family is not AF_INET6.");

return &(reinterpret_cast<sockaddr_in6*>(sa)->sin6_addr);
}

void sockaddr2string(struct sockaddr* sa, char* resultString)
in6_addr* try_sockaddr2in6_addr(sockaddr* sa)
{
in_addr* ipv4Addr = sockaddr2in_addr(sa);
if (ipv4Addr != nullptr)
try
{
return sockaddr2in6_addr(sa);
}
catch (const std::invalid_argument& e)
{
PCPP_LOG_DEBUG("Extraction failed: " << e.what() << " Returning nullptr.");
return nullptr;
}
}

void sockaddr2string(sockaddr const* sa, char* resultString, size_t resultBufLen)
{
if (sa == nullptr)
throw std::invalid_argument("sockaddr is nullptr");

switch (sa->sa_family)
{
case AF_INET:
{
PCPP_LOG_DEBUG("IPv4 packet address");
inet_ntop(AF_INET, &(((sockaddr_in*)sa)->sin_addr), resultString, INET_ADDRSTRLEN);
if (resultBufLen < INET_ADDRSTRLEN)
throw std::invalid_argument("Insufficient buffer");

if (inet_ntop(AF_INET, &(reinterpret_cast<sockaddr_in const*>(sa)->sin_addr), resultString, resultBufLen) == nullptr)
{
throw std::runtime_error("Unknown error during conversion");
}
break;
}
else
case AF_INET6:
{
PCPP_LOG_DEBUG("Not IPv4 packet address. Assuming IPv6 packet");
inet_ntop(AF_INET6, &(((sockaddr_in6*)sa)->sin6_addr), resultString, INET6_ADDRSTRLEN);
PCPP_LOG_DEBUG("IPv6 packet address");
if (resultBufLen < INET6_ADDRSTRLEN)
throw std::invalid_argument("Insufficient buffer");

if(inet_ntop(AF_INET6, &(reinterpret_cast<sockaddr_in6 const*>(sa)->sin6_addr), resultString, resultBufLen) == nullptr)
{
throw std::runtime_error("Unknown error during conversion");
}
break;
}
default:
throw std::invalid_argument("Unsupported sockaddr family. Family is not AF_INET or AF_INET6.");
}
}

Expand Down
32 changes: 16 additions & 16 deletions Packet++/header/IPv4Layer.h
Original file line number Diff line number Diff line change
Expand Up @@ -242,9 +242,9 @@ namespace pcpp
if (dataSize < 2)
return res;

uint8_t valueOffset = (uint8_t)(1);
uint8_t valueOffset = static_cast<uint8_t>(1);

while ((size_t)valueOffset < dataSize)
while (static_cast<size_t>(valueOffset) < dataSize)
{
uint32_t curValue;
memcpy(&curValue, m_Data->recordValue + valueOffset, sizeof(uint32_t));
Expand All @@ -253,7 +253,7 @@ namespace pcpp

res.push_back(IPv4Address(curValue));

valueOffset += (uint8_t)(4);
valueOffset += static_cast<uint8_t>(4);
}

return res;
Expand Down Expand Up @@ -281,12 +281,12 @@ namespace pcpp
if (dataSize < 2)
return res;

res.type = (IPv4TimestampOptionValue::TimestampType)m_Data->recordValue[1];
res.type = static_cast<IPv4TimestampOptionValue::TimestampType>(m_Data->recordValue[1]);

uint8_t valueOffset = (uint8_t)(2);
uint8_t valueOffset = static_cast<uint8_t>(2);
bool readIPAddr = (res.type == IPv4TimestampOptionValue::TimestampAndIP);

while ((size_t)valueOffset < dataSize)
while (static_cast<size_t>(valueOffset) < dataSize)
{
uint32_t curValue;
memcpy(&curValue, m_Data->recordValue + valueOffset, sizeof(uint32_t));
Expand All @@ -301,7 +301,7 @@ namespace pcpp
if (res.type == IPv4TimestampOptionValue::TimestampAndIP)
readIPAddr = !readIPAddr;

valueOffset += (uint8_t)(4);
valueOffset += static_cast<uint8_t>(4);
}

return res;
Expand All @@ -323,14 +323,14 @@ namespace pcpp
*/
static bool canAssign(const uint8_t* recordRawData, size_t tlvDataLen)
{
auto data = (TLVRawData*)recordRawData;
auto data = reinterpret_cast<TLVRawData const*>(recordRawData);
if (data == nullptr)
return false;

if (tlvDataLen < sizeof(TLVRawData::recordType))
return false;

if (getIPv4OptionType(data) == (uint8_t)IPV4OPT_EndOfOptionsList || data->recordType == (uint8_t)IPV4OPT_NOP)
if (getIPv4OptionType(data) == static_cast<uint8_t>(IPV4OPT_EndOfOptionsList) || data->recordType == static_cast<uint8_t>(IPV4OPT_NOP))
return true;

return TLVRecord<uint8_t, uint8_t>::canAssign(recordRawData, tlvDataLen);
Expand All @@ -343,21 +343,21 @@ namespace pcpp
if (m_Data == nullptr)
return 0;

if (getIPv4OptionType() == (uint8_t)IPV4OPT_EndOfOptionsList || m_Data->recordType == (uint8_t)IPV4OPT_NOP)
if (getIPv4OptionType() == static_cast<uint8_t>(IPV4OPT_EndOfOptionsList) || m_Data->recordType == static_cast<uint8_t>(IPV4OPT_NOP))
return sizeof(uint8_t);

return (size_t)m_Data->recordLen;
return static_cast<size_t>(m_Data->recordLen);
}

size_t getDataSize() const
{
if (m_Data == nullptr)
return 0;

if (getIPv4OptionType() == (uint8_t)IPV4OPT_EndOfOptionsList || m_Data->recordType == (uint8_t)IPV4OPT_NOP)
return (size_t)0;
if (getIPv4OptionType() == static_cast<uint8_t>(IPV4OPT_EndOfOptionsList) || m_Data->recordType == static_cast<uint8_t>(IPV4OPT_NOP))
return 0;

return (size_t)m_Data->recordLen - (2*sizeof(uint8_t));
return static_cast<size_t>(m_Data->recordLen) - (2*sizeof(uint8_t));
}

private:
Expand All @@ -369,7 +369,7 @@ namespace pcpp
if (data == nullptr)
return IPV4OPT_Unknown;

return (IPv4OptionTypes)data->recordType;
return static_cast<IPv4OptionTypes>(data->recordType);
}
};

Expand Down Expand Up @@ -637,7 +637,7 @@ namespace pcpp
/**
* @return Size of IPv4 header (including IPv4 options if exist)
*/
size_t getHeaderLen() const { return (size_t)((uint16_t)(getIPv4Header()->internetHeaderLength) * 4) + m_TempHeaderExtension; }
size_t getHeaderLen() const { return static_cast<size_t>(static_cast<uint16_t>(getIPv4Header()->internetHeaderLength) * 4) + m_TempHeaderExtension; }

/**
* Calculate the following fields:
Expand Down
6 changes: 3 additions & 3 deletions Packet++/header/IPv6Layer.h
Original file line number Diff line number Diff line change
Expand Up @@ -231,19 +231,19 @@ namespace pcpp
while (curExt != NULL && dynamic_cast<TIPv6Extension*>(curExt) == NULL)
curExt = curExt->getNextHeader();

return (TIPv6Extension*)curExt;
return static_cast<TIPv6Extension*>(curExt);
}

template<class TIPv6Extension>
TIPv6Extension* IPv6Layer::addExtension(const TIPv6Extension& extensionHeader)
{
int offsetToAddHeader = (int)getHeaderLen();
int offsetToAddHeader = static_cast<int>(getHeaderLen());
if (!extendLayer(offsetToAddHeader, extensionHeader.getExtensionLen()))
{
return NULL;
}

TIPv6Extension* newHeader = new TIPv6Extension(this, (size_t)offsetToAddHeader);
TIPv6Extension* newHeader = new TIPv6Extension(this, static_cast<size_t>(offsetToAddHeader));
(*newHeader) = extensionHeader;

if (m_FirstExtension != NULL)
Expand Down
Loading

0 comments on commit bd4f74b

Please sign in to comment.