From 47d24a00da56cbd13a52fe33597d8d82e78024b1 Mon Sep 17 00:00:00 2001 From: Paulo Cabral Sanz Date: Tue, 12 Jan 2021 18:52:43 -0300 Subject: [PATCH 1/4] Avoid UB and abort on nullptr buffer --- libraries/ESP8266WiFi/src/WiFiClient.cpp | 2 +- libraries/Netdump/src/Netdump.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/ESP8266WiFi/src/WiFiClient.cpp b/libraries/ESP8266WiFi/src/WiFiClient.cpp index 5aa09b8874..bd3408b75d 100644 --- a/libraries/ESP8266WiFi/src/WiFiClient.cpp +++ b/libraries/ESP8266WiFi/src/WiFiClient.cpp @@ -207,7 +207,7 @@ size_t WiFiClient::write(uint8_t b) size_t WiFiClient::write(const uint8_t *buf, size_t size) { - if (!_client || !size) + if (!buf || !_client || !size) { return 0; } diff --git a/libraries/Netdump/src/Netdump.cpp b/libraries/Netdump/src/Netdump.cpp index 4d6a9f42dc..d032b42180 100644 --- a/libraries/Netdump/src/Netdump.cpp +++ b/libraries/Netdump/src/Netdump.cpp @@ -162,7 +162,7 @@ void Netdump::tcpDumpProcess(const Packet& np) } size_t incl_len = np.getPacketSize() > maxPcapLength ? maxPcapLength : np.getPacketSize(); - if (bufferIndex + 16 + incl_len < tcpBufferSize) // only add if enough space available + if (packetBuffer && bufferIndex + 16 + incl_len < tcpBufferSize) // only add if enough space available { struct timeval tv; gettimeofday(&tv, nullptr); From c19e025432607532544c7292c3505defbe20dbb7 Mon Sep 17 00:00:00 2001 From: Paulo Cabral Sanz Date: Tue, 12 Jan 2021 19:04:38 -0300 Subject: [PATCH 2/4] Improve handling of nullptr buffer --- libraries/ESP8266WiFi/src/WiFiClient.cpp | 2 +- libraries/Netdump/src/Netdump.cpp | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/libraries/ESP8266WiFi/src/WiFiClient.cpp b/libraries/ESP8266WiFi/src/WiFiClient.cpp index bd3408b75d..5aa09b8874 100644 --- a/libraries/ESP8266WiFi/src/WiFiClient.cpp +++ b/libraries/ESP8266WiFi/src/WiFiClient.cpp @@ -207,7 +207,7 @@ size_t WiFiClient::write(uint8_t b) size_t WiFiClient::write(const uint8_t *buf, size_t size) { - if (!buf || !_client || !size) + if (!_client || !size) { return 0; } diff --git a/libraries/Netdump/src/Netdump.cpp b/libraries/Netdump/src/Netdump.cpp index d032b42180..4cafd2be51 100644 --- a/libraries/Netdump/src/Netdump.cpp +++ b/libraries/Netdump/src/Netdump.cpp @@ -90,6 +90,10 @@ void Netdump::tcpDump(WiFiServer &tcpDumpServer, const Filter nf) if (!packetBuffer) { packetBuffer = new (std::nothrow) char[tcpBufferSize]; + + if (!packetBuffer) { + return; + } } bufferIndex = 0; @@ -162,7 +166,7 @@ void Netdump::tcpDumpProcess(const Packet& np) } size_t incl_len = np.getPacketSize() > maxPcapLength ? maxPcapLength : np.getPacketSize(); - if (packetBuffer && bufferIndex + 16 + incl_len < tcpBufferSize) // only add if enough space available + if (bufferIndex + 16 + incl_len < tcpBufferSize) // only add if enough space available { struct timeval tv; gettimeofday(&tv, nullptr); From 34bbf1390f12d3fa6390e7f5f89135e4c0493490 Mon Sep 17 00:00:00 2001 From: Paulo Cabral Sanz Date: Tue, 12 Jan 2021 19:09:10 -0300 Subject: [PATCH 3/4] Fix style --- libraries/Netdump/src/Netdump.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/Netdump/src/Netdump.cpp b/libraries/Netdump/src/Netdump.cpp index 4cafd2be51..cec2284a0c 100644 --- a/libraries/Netdump/src/Netdump.cpp +++ b/libraries/Netdump/src/Netdump.cpp @@ -91,7 +91,8 @@ void Netdump::tcpDump(WiFiServer &tcpDumpServer, const Filter nf) { packetBuffer = new (std::nothrow) char[tcpBufferSize]; - if (!packetBuffer) { + if (!packetBuffer) + { return; } } From 0b55775e635f243581f0f4fc100f033dfb920c13 Mon Sep 17 00:00:00 2001 From: Paulo Cabral Sanz Date: Tue, 12 Jan 2021 19:30:32 -0300 Subject: [PATCH 4/4] Report OOM on return value --- libraries/Netdump/src/Netdump.cpp | 5 +++-- libraries/Netdump/src/Netdump.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/libraries/Netdump/src/Netdump.cpp b/libraries/Netdump/src/Netdump.cpp index cec2284a0c..326f2eaa73 100644 --- a/libraries/Netdump/src/Netdump.cpp +++ b/libraries/Netdump/src/Netdump.cpp @@ -84,7 +84,7 @@ void Netdump::fileDump(File& outfile, const Filter nf) fileDumpProcess(outfile, ndp); }, nf); } -void Netdump::tcpDump(WiFiServer &tcpDumpServer, const Filter nf) +bool Netdump::tcpDump(WiFiServer &tcpDumpServer, const Filter nf) { if (!packetBuffer) @@ -93,7 +93,7 @@ void Netdump::tcpDump(WiFiServer &tcpDumpServer, const Filter nf) if (!packetBuffer) { - return; + return false; } } bufferIndex = 0; @@ -102,6 +102,7 @@ void Netdump::tcpDump(WiFiServer &tcpDumpServer, const Filter nf) { tcpDumpLoop(tcpDumpServer, nf); }); + return true; } void Netdump::capture(int netif_idx, const char* data, size_t len, int out, int success) diff --git a/libraries/Netdump/src/Netdump.h b/libraries/Netdump/src/Netdump.h index 1011a8e955..8ef4532883 100644 --- a/libraries/Netdump/src/Netdump.h +++ b/libraries/Netdump/src/Netdump.h @@ -53,7 +53,7 @@ class Netdump void printDump(Print& out, Packet::PacketDetail ndd, const Filter nf = nullptr); void fileDump(File& outfile, const Filter nf = nullptr); - void tcpDump(WiFiServer &tcpDumpServer, const Filter nf = nullptr); + bool tcpDump(WiFiServer &tcpDumpServer, const Filter nf = nullptr); private: pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy