diff --git a/components/esp_http_client/esp_http_client.c b/components/esp_http_client/esp_http_client.c index 8f91ef3b05..f59ad8d294 100644 --- a/components/esp_http_client/esp_http_client.c +++ b/components/esp_http_client/esp_http_client.c @@ -1116,7 +1116,12 @@ static int esp_http_client_get_data(esp_http_client_handle_t client) int rlen = esp_transport_read(client->transport, res_buffer->data, client->buffer_size_rx, client->timeout_ms); if (rlen >= 0) { - http_parser_execute(client->parser, client->parser_settings, res_buffer->data, rlen); + // When tls error is ESP_TLS_ERR_SSL_WANT_READ (-0x6900), esp_trasnport_read returns ERR_TCP_TRANSPORT_CONNECTION_TIMEOUT (0x0). + // We should not execute http_parser_execute() on this condition as it sets the internal state machine in an + // invalid state. + if (!(client->is_async && rlen == 0)) { + http_parser_execute(client->parser, client->parser_settings, res_buffer->data, rlen); + } } return rlen; }