1
1
/*
2
- * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD
2
+ * SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD
3
3
*
4
4
* SPDX-License-Identifier: Apache-2.0
5
5
*/
6
6
7
7
#include <string.h>
8
- #include <sys/param.h>
9
8
#include "freertos/FreeRTOS.h"
10
9
#include "freertos/task.h"
11
10
#include "freertos/queue.h"
12
11
#include "freertos/semphr.h"
13
12
#include "esp_log.h"
14
13
#include "esp_event.h"
14
+ #include "esp_random.h"
15
+ #include "esp_check.h"
15
16
#include "mdns.h"
16
17
#include "mdns_private.h"
17
18
#include "mdns_networking.h"
18
- #include "esp_log.h"
19
- #include "esp_random.h"
20
- #include "esp_check.h"
21
19
22
20
static void _mdns_browse_item_free (mdns_browse_t * browse );
23
21
static 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)
334
332
335
333
static bool _mdns_can_add_more_services (void )
336
334
{
335
+ #if MDNS_MAX_SERVICES == 0
336
+ return false;
337
+ #else
337
338
mdns_srv_item_t * s = _mdns_server -> services ;
338
339
uint16_t service_num = 0 ;
339
340
while (s ) {
@@ -343,8 +344,8 @@ static bool _mdns_can_add_more_services(void)
343
344
return false;
344
345
}
345
346
}
346
-
347
347
return true;
348
+ #endif
348
349
}
349
350
350
351
esp_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
3485
3486
uint16_t i = 0 , y ;
3486
3487
size_t partLen = 0 ;
3487
3488
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 ;
3490
3492
}
3491
3493
3492
3494
if (!num_items ) {
@@ -4477,10 +4479,11 @@ void mdns_preset_if_handle_system_event(void *arg, esp_event_base_t event_base,
4477
4479
case IP_EVENT_GOT_IP6 : {
4478
4480
ip_event_got_ip6_t * event = (ip_event_got_ip6_t * ) event_data ;
4479
4481
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 ;
4483
4484
}
4485
+ post_mdns_enable_pcb (mdns_if , MDNS_IP_PROTOCOL_V6 );
4486
+ post_mdns_announce_pcb (mdns_if , MDNS_IP_PROTOCOL_V4 );
4484
4487
mdns_browse_t * browse = _mdns_server -> browse ;
4485
4488
while (browse ) {
4486
4489
_mdns_browse_send (browse , mdns_if );
@@ -5892,7 +5895,7 @@ esp_err_t mdns_instance_name_set(const char *instance)
5892
5895
esp_err_t mdns_service_add_for_host (const char * instance , const char * service , const char * proto , const char * host ,
5893
5896
uint16_t port , mdns_txt_item_t txt [], size_t num_items )
5894
5897
{
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 ) {
5896
5899
return ESP_ERR_INVALID_ARG ;
5897
5900
}
5898
5901
@@ -5901,7 +5904,8 @@ esp_err_t mdns_service_add_for_host(const char *instance, const char *service, c
5901
5904
const char * hostname = host ? host : _mdns_server -> hostname ;
5902
5905
mdns_service_t * s = NULL ;
5903
5906
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 );
5905
5909
5906
5910
mdns_srv_item_t * item = _mdns_get_service_item_instance (instance , service , proto , hostname );
5907
5911
ESP_GOTO_ON_FALSE (!item , ESP_ERR_INVALID_ARG , err , TAG , "Service already exists" );
0 commit comments