11/*
2- * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
2+ * SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
33 *
44 * SPDX-License-Identifier: Apache-2.0
55 */
66
77#include <string.h>
8- #include <sys/param.h>
98#include "freertos/FreeRTOS.h"
109#include "freertos/task.h"
1110#include "freertos/queue.h"
1211#include "freertos/semphr.h"
1312#include "esp_log.h"
1413#include "esp_event.h"
14+ #include "esp_random.h"
15+ #include "esp_check.h"
1516#include "mdns.h"
1617#include "mdns_private.h"
1718#include "mdns_networking.h"
18- #include "esp_log.h"
19- #include "esp_random.h"
20- #include "esp_check.h"
2119
2220static void _mdns_browse_item_free (mdns_browse_t * browse );
2321static esp_err_t _mdns_send_browse_action (mdns_action_type_t type , mdns_browse_t * browse );
@@ -334,6 +332,9 @@ static mdns_host_item_t *mdns_get_host_item(const char *hostname)
334332
335333static bool _mdns_can_add_more_services (void )
336334{
335+ #if MDNS_MAX_SERVICES == 0
336+ return false;
337+ #else
337338 mdns_srv_item_t * s = _mdns_server -> services ;
338339 uint16_t service_num = 0 ;
339340 while (s ) {
@@ -343,8 +344,8 @@ static bool _mdns_can_add_more_services(void)
343344 return false;
344345 }
345346 }
346-
347347 return true;
348+ #endif
348349}
349350
350351esp_err_t _mdns_send_rx_action (mdns_rx_packet_t * packet )
@@ -3485,8 +3486,9 @@ static void _mdns_result_txt_create(const uint8_t *data, size_t len, mdns_txt_it
34853486 uint16_t i = 0 , y ;
34863487 size_t partLen = 0 ;
34873488 int num_items = _mdns_txt_items_count_get (data , len );
3488- if (num_items < 0 ) {
3489- return ;//error
3489+ if (num_items < 0 || num_items > SIZE_MAX / sizeof (mdns_txt_item_t )) {
3490+ // Error: num_items is incorrect (or too large to allocate)
3491+ return ;
34903492 }
34913493
34923494 if (!num_items ) {
@@ -4477,10 +4479,11 @@ void mdns_preset_if_handle_system_event(void *arg, esp_event_base_t event_base,
44774479 case IP_EVENT_GOT_IP6 : {
44784480 ip_event_got_ip6_t * event = (ip_event_got_ip6_t * ) event_data ;
44794481 mdns_if_t mdns_if = _mdns_get_if_from_esp_netif (event -> esp_netif );
4480- if (mdns_if < MDNS_MAX_INTERFACES ) {
4481- post_mdns_enable_pcb (mdns_if , MDNS_IP_PROTOCOL_V6 );
4482- post_mdns_announce_pcb (mdns_if , MDNS_IP_PROTOCOL_V4 );
4482+ if (mdns_if >= MDNS_MAX_INTERFACES ) {
4483+ return ;
44834484 }
4485+ post_mdns_enable_pcb (mdns_if , MDNS_IP_PROTOCOL_V6 );
4486+ post_mdns_announce_pcb (mdns_if , MDNS_IP_PROTOCOL_V4 );
44844487 mdns_browse_t * browse = _mdns_server -> browse ;
44854488 while (browse ) {
44864489 _mdns_browse_send (browse , mdns_if );
@@ -5892,7 +5895,7 @@ esp_err_t mdns_instance_name_set(const char *instance)
58925895esp_err_t mdns_service_add_for_host (const char * instance , const char * service , const char * proto , const char * host ,
58935896 uint16_t port , mdns_txt_item_t txt [], size_t num_items )
58945897{
5895- if (!_mdns_server || _str_null_or_empty (service ) || _str_null_or_empty (proto ) || !port || ! _mdns_server -> hostname ) {
5898+ if (!_mdns_server || _str_null_or_empty (service ) || _str_null_or_empty (proto ) || !_mdns_server -> hostname ) {
58965899 return ESP_ERR_INVALID_ARG ;
58975900 }
58985901
@@ -5901,7 +5904,8 @@ esp_err_t mdns_service_add_for_host(const char *instance, const char *service, c
59015904 const char * hostname = host ? host : _mdns_server -> hostname ;
59025905 mdns_service_t * s = NULL ;
59035906
5904- ESP_GOTO_ON_FALSE (_mdns_can_add_more_services (), ESP_ERR_NO_MEM , err , TAG , "Cannot add more services" );
5907+ ESP_GOTO_ON_FALSE (_mdns_can_add_more_services (), ESP_ERR_NO_MEM , err , TAG ,
5908+ "Cannot add more services, please increase CONFIG_MDNS_MAX_SERVICES (%d)" , CONFIG_MDNS_MAX_SERVICES );
59055909
59065910 mdns_srv_item_t * item = _mdns_get_service_item_instance (instance , service , proto , hostname );
59075911 ESP_GOTO_ON_FALSE (!item , ESP_ERR_INVALID_ARG , err , TAG , "Service already exists" );
0 commit comments