mdns: fixed crash on free undefined ptr after skipped strdup

Shortcircuit evaluation may cause skip of _mdns_strdup_check of any further question field, which after clear_rx_packet freed undefined memory.
Fixes https://ezredmine.espressif.cn:8765/issues/28465


* Original commit: espressif/esp-idf@e0a8044a16
This commit is contained in:
David Cermak
2019-01-25 17:19:13 +01:00
committed by suren-gabrielyan-espressif
parent 98e3171db6
commit 2ac83d0f27

View File

@ -2590,7 +2590,7 @@ void mdns_parse_packet(mdns_rx_packet_t * packet)
parsed_packet->discovery = true; parsed_packet->discovery = true;
mdns_srv_item_t * a = _mdns_server->services; mdns_srv_item_t * a = _mdns_server->services;
while (a) { while (a) {
mdns_parsed_question_t * question = (mdns_parsed_question_t *)malloc(sizeof(mdns_parsed_question_t)); mdns_parsed_question_t * question = (mdns_parsed_question_t *)calloc(1, sizeof(mdns_parsed_question_t));
if (!question) { if (!question) {
HOOK_MALLOC_FAILED; HOOK_MALLOC_FAILED;
goto clear_rx_packet; goto clear_rx_packet;
@ -2618,7 +2618,7 @@ void mdns_parse_packet(mdns_rx_packet_t * packet)
parsed_packet->probe = true; parsed_packet->probe = true;
} }
mdns_parsed_question_t * question = (mdns_parsed_question_t *)malloc(sizeof(mdns_parsed_question_t)); mdns_parsed_question_t * question = (mdns_parsed_question_t *)calloc(1, sizeof(mdns_parsed_question_t));
if (!question) { if (!question) {
HOOK_MALLOC_FAILED; HOOK_MALLOC_FAILED;
goto clear_rx_packet; goto clear_rx_packet;