@@ -253,12 +253,13 @@ static char *_mdns_mangle_name(char *in)
253
253
}
254
254
sprintf (ret , "%s-2" , in );
255
255
} else {
256
- ret = malloc (strlen (in ) + 2 ); //one extra byte in case 9-10 or 99-100 etc
256
+ size_t in_len = strlen (in );
257
+ ret = malloc (in_len + 2 ); //one extra byte in case 9-10 or 99-100 etc
257
258
if (ret == NULL ) {
258
259
HOOK_MALLOC_FAILED ;
259
260
return NULL ;
260
261
}
261
- strcpy (ret , in );
262
+ memcpy (ret , in , in_len );
262
263
int baseLen = p - in ; //length of 'bla' in 'bla-123'
263
264
//overwrite suffix with new suffix
264
265
sprintf (ret + baseLen , "-%d" , suffix + 1 );
@@ -1811,7 +1812,6 @@ static bool _mdns_create_answer_from_service(mdns_tx_packet_t *packet, mdns_serv
1811
1812
return false;
1812
1813
}
1813
1814
} else if (question -> type == MDNS_TYPE_SDPTR ) {
1814
- shared = true;
1815
1815
if (!_mdns_alloc_answer (& packet -> answers , MDNS_TYPE_SDPTR , service , NULL , false, false)) {
1816
1816
return false;
1817
1817
}
@@ -2355,6 +2355,11 @@ static void _mdns_restart_pcb(mdns_if_t tcpip_if, mdns_ip_protocol_t ip_protocol
2355
2355
srv_count ++ ;
2356
2356
a = a -> next ;
2357
2357
}
2358
+ if (srv_count == 0 ) {
2359
+ // proble only IP
2360
+ _mdns_init_pcb_probe (tcpip_if , ip_protocol , NULL , 0 , true);
2361
+ return ;
2362
+ }
2358
2363
mdns_srv_item_t * services [srv_count ];
2359
2364
size_t i = 0 ;
2360
2365
a = _mdns_server -> services ;
@@ -2555,6 +2560,10 @@ static void _mdns_restart_all_pcbs(void)
2555
2560
srv_count ++ ;
2556
2561
a = a -> next ;
2557
2562
}
2563
+ if (srv_count == 0 ) {
2564
+ _mdns_probe_all_pcbs (NULL , 0 , true, true);
2565
+ return ;
2566
+ }
2558
2567
mdns_srv_item_t * services [srv_count ];
2559
2568
size_t l = 0 ;
2560
2569
a = _mdns_server -> services ;
@@ -2898,11 +2907,12 @@ static int _mdns_check_srv_collision(mdns_service_t *service, uint16_t priority,
2898
2907
static int _mdns_check_txt_collision (mdns_service_t * service , const uint8_t * data , size_t len )
2899
2908
{
2900
2909
size_t data_len = 0 ;
2901
- if (len == 1 && service -> txt ) {
2910
+ if (len <= 1 && service -> txt ) { // len==0 means incorrect packet (and handled by the packet parser)
2911
+ // but handled here again to fix clang-tidy warning on VLA "uint8_t our[0];"
2902
2912
return -1 ;//we win
2903
2913
} else if (len > 1 && !service -> txt ) {
2904
2914
return 1 ;//they win
2905
- } else if (len = = 1 && !service -> txt ) {
2915
+ } else if (len < = 1 && !service -> txt ) {
2906
2916
return 0 ;//same
2907
2917
}
2908
2918
@@ -3788,7 +3798,7 @@ void mdns_parse_packet(mdns_rx_packet_t *packet)
3788
3798
mdns_class &= 0x7FFF ;
3789
3799
3790
3800
content = data_ptr + data_len ;
3791
- if (content > (data + len )) {
3801
+ if (content > (data + len ) || data_len == 0 ) {
3792
3802
goto clear_rx_packet ;
3793
3803
}
3794
3804
@@ -4271,15 +4281,10 @@ void mdns_parse_packet(mdns_rx_packet_t *packet)
4271
4281
free (record );
4272
4282
}
4273
4283
free (parsed_packet );
4274
- if (browse_result_instance ) {
4275
- free (browse_result_instance );
4276
- }
4277
- if (browse_result_service ) {
4278
- free (browse_result_service );
4279
- }
4280
- if (browse_result_proto ) {
4281
- free (browse_result_proto );
4282
- }
4284
+ free (browse_result_instance );
4285
+ free (browse_result_service );
4286
+ free (browse_result_proto );
4287
+ free (out_sync_browse );
4283
4288
}
4284
4289
4285
4290
/**
@@ -5346,7 +5351,8 @@ static void _mdns_service_task(void *pvParameters)
5346
5351
for (;;) {
5347
5352
if (_mdns_server && _mdns_server -> action_queue ) {
5348
5353
if (xQueueReceive (_mdns_server -> action_queue , & a , portMAX_DELAY ) == pdTRUE ) {
5349
- if (a && a -> type == ACTION_TASK_STOP ) {
5354
+ assert (a );
5355
+ if (a -> type == ACTION_TASK_STOP ) {
5350
5356
break ;
5351
5357
}
5352
5358
MDNS_SERVICE_LOCK ();
0 commit comments