Skip to content

Commit

Permalink
Improve fuzzing coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
sashashura committed Nov 2, 2023
1 parent 8c4f231 commit 57ccb54
Show file tree
Hide file tree
Showing 6 changed files with 680 additions and 55 deletions.
6 changes: 3 additions & 3 deletions Pcap++/src/PcapFileDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,13 +205,13 @@ bool SnoopFileReaderDevice::getNextPacket(RawPacket& rawPacket)
if(packetSize > 15000) {
return false;
}
char* packetData = new char[packetSize];
m_snoopFile.read(packetData, packetSize);
std::unique_ptr<char[]> packetData(new char[packetSize]);
m_snoopFile.read(packetData.get(), packetSize);
if(!m_snoopFile) {
return false;
}
timespec ts = { static_cast<time_t>(be32toh(snoop_packet_header.time_sec)), static_cast<long>(be32toh(snoop_packet_header.time_usec)) * 1000 };
if (!rawPacket.setRawData((const uint8_t*)packetData, packetSize, ts, static_cast<LinkLayerType>(m_PcapLinkLayerType)))
if (!rawPacket.setRawData((const uint8_t*)packetData.release(), packetSize, ts, static_cast<LinkLayerType>(m_PcapLinkLayerType)))
{
PCPP_LOG_ERROR("Couldn't set data to raw packet");
return false;
Expand Down
21 changes: 20 additions & 1 deletion Tests/Fuzzers/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,22 @@
add_executable(FuzzTarget FuzzTarget.cpp)

target_link_libraries(FuzzTarget PRIVATE Pcap++ -fsanitize=fuzzer)
target_compile_definitions(FuzzTarget PUBLIC FILE_EXT=".pcap")
target_include_directories(FuzzTarget PRIVATE $<TARGET_PROPERTY:EndianPortable,INTERFACE_INCLUDE_DIRECTORIES>)

add_executable(FuzzTargetNg FuzzTarget.cpp)
target_link_libraries(FuzzTargetNg PRIVATE Pcap++ -fsanitize=fuzzer)
target_compile_definitions(FuzzTargetNg PUBLIC FILE_EXT=".pcapng")
target_include_directories(FuzzTargetNg PRIVATE $<TARGET_PROPERTY:EndianPortable,INTERFACE_INCLUDE_DIRECTORIES>)

add_executable(FuzzTargetSnoop FuzzTarget.cpp)
target_link_libraries(FuzzTargetSnoop PRIVATE Pcap++ -fsanitize=fuzzer)
target_compile_definitions(FuzzTargetSnoop PUBLIC FILE_EXT=".snoop")
target_include_directories(FuzzTargetSnoop PRIVATE $<TARGET_PROPERTY:EndianPortable,INTERFACE_INCLUDE_DIRECTORIES>)

add_executable(FuzzWriter FuzzWriter.cpp)
target_link_libraries(FuzzWriter PRIVATE Pcap++ -fsanitize=fuzzer)
target_compile_definitions(FuzzWriter PUBLIC FILE_EXT=".pcap" NG_WRITER)

add_executable(FuzzWriterNg FuzzWriter.cpp)
target_link_libraries(FuzzWriterNg PRIVATE Pcap++ -fsanitize=fuzzer)
target_compile_definitions(FuzzWriterNg PUBLIC FILE_EXT=".pcapng")
32 changes: 32 additions & 0 deletions Tests/Fuzzers/DumpToFile.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#ifndef DUMP_TO_FILE_H
#define DUMP_TO_FILE_H

#include <iostream>

// This function is created as PcapPlusPlus doesn't seem to offer a way of
// parsing Pcap files directly from memory
int dumpDataToPcapFile(const uint8_t *data, size_t size, const char* path)
{
FILE *fd;
int written = 0;

fd = fopen(path, "wb");
if (fd == NULL)
{
std::cerr << "Error opening pcap file for writing\n";
return -1;
}

written = fwrite(data, 1, size, fd);
if (static_cast<size_t>(written) != size)
{
std::cerr << "Error writing pcap file\n";
fclose(fd);
return -1;
}

fclose(fd);
return 0;
}

#endif // DUMP_TO_FILE_H
Loading

0 comments on commit 57ccb54

Please sign in to comment.