From 0eeb010a65f95b7ea4d54fca9a9c6bfb595c42ba Mon Sep 17 00:00:00 2001 From: Damian Schneider Date: Sun, 10 May 2026 11:04:19 +0200 Subject: [PATCH 1/2] bugfix in parsePacket(): accept short artnet packets --- wled00/src/dependencies/e131/ESPAsyncE131.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wled00/src/dependencies/e131/ESPAsyncE131.cpp b/wled00/src/dependencies/e131/ESPAsyncE131.cpp index 937e6828ef..9746cc2ab7 100644 --- a/wled00/src/dependencies/e131/ESPAsyncE131.cpp +++ b/wled00/src/dependencies/e131/ESPAsyncE131.cpp @@ -99,15 +99,15 @@ bool ESPAsyncE131::initMulticast(uint16_t port, uint16_t universe, uint8_t n) { void ESPAsyncE131::parsePacket(AsyncUDPPacket _packet) { bool error = false; - uint8_t protocol = P_E131; + uint8_t protocol = P_ARTNET; const size_t pktLen = _packet.length(); e131_packet_t *sbuff = reinterpret_cast(_packet.data()); // E1.31 packet identifier (ACN_ID = "ASC-E1.17"), need at least 16 bytes to safely read acn_id (offset 4, length 12). if (pktLen >= 16) { - if (memcmp(sbuff->acn_id, ESPAsyncE131::ACN_ID, sizeof(sbuff->acn_id))) - protocol = P_ARTNET; + if (!memcmp(sbuff->acn_id, ESPAsyncE131::ACN_ID, sizeof(sbuff->acn_id))) + protocol = P_E131; } if (protocol == P_ARTNET) { From 0551b32087d4ba045fd02b3e71b1ba6e9548c2d7 Mon Sep 17 00:00:00 2001 From: Damian Schneider Date: Mon, 11 May 2026 19:34:27 +0200 Subject: [PATCH 2/2] add min artnet packet size check and fix indentation --- wled00/src/dependencies/e131/ESPAsyncE131.cpp | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/wled00/src/dependencies/e131/ESPAsyncE131.cpp b/wled00/src/dependencies/e131/ESPAsyncE131.cpp index 9746cc2ab7..8961e75e8a 100644 --- a/wled00/src/dependencies/e131/ESPAsyncE131.cpp +++ b/wled00/src/dependencies/e131/ESPAsyncE131.cpp @@ -111,21 +111,25 @@ void ESPAsyncE131::parsePacket(AsyncUDPPacket _packet) { } if (protocol == P_ARTNET) { - if (memcmp(sbuff->art_id, ESPAsyncE131::ART_ID, sizeof(sbuff->art_id))) - error = true; //not "Art-Net" - if (sbuff->art_opcode != ARTNET_OPCODE_OPDMX && sbuff->art_opcode != ARTNET_OPCODE_OPPOLL) - error = true; //not a DMX or poll packet - } else { //E1.31 error handling - if (htonl(sbuff->root_vector) != ESPAsyncE131::VECTOR_ROOT) - error = true; - if (htonl(sbuff->frame_vector) != ESPAsyncE131::VECTOR_FRAME) - error = true; - if (sbuff->dmp_vector != ESPAsyncE131::VECTOR_DMP) - error = true; - if (sbuff->property_values[0] != 0) - error = true; - } - + if (pktLen < 10) { + error = true; // Need at least Art-Net ID (8) + opcode (2) + } else { + if (memcmp(sbuff->art_id, ESPAsyncE131::ART_ID, sizeof(sbuff->art_id))) + error = true; //not "Art-Net" + if (sbuff->art_opcode != ARTNET_OPCODE_OPDMX && sbuff->art_opcode != ARTNET_OPCODE_OPPOLL) + error = true; //not a DMX or poll packet + } + } else { //E1.31 error handling + if (htonl(sbuff->root_vector) != ESPAsyncE131::VECTOR_ROOT) + error = true; + if (htonl(sbuff->frame_vector) != ESPAsyncE131::VECTOR_FRAME) + error = true; + if (sbuff->dmp_vector != ESPAsyncE131::VECTOR_DMP) + error = true; + if (sbuff->property_values[0] != 0) + error = true; + } + if (error && _packet.localPort() == DDP_DEFAULT_PORT) { //DDP packet error = false; protocol = P_DDP;