fix(modem): handle nullptr in DTE constructors to prevent invalid access

This commit is contained in:
Matheus Deodato
2025-02-19 14:28:45 -03:00
parent c679ceed85
commit 95b56600ed

View File

@ -14,38 +14,53 @@ using namespace esp_modem;
static const size_t dte_default_buffer_size = 1000; static const size_t dte_default_buffer_size = 1000;
DTE::DTE(const esp_modem_dte_config *config, std::unique_ptr<Terminal> terminal): DTE::DTE(const esp_modem_dte_config *config, std::unique_ptr<Terminal> terminal)
buffer(config->dte_buffer_size), : buffer(config->dte_buffer_size),
cmux_term(nullptr), primary_term(std::move(terminal)), secondary_term(primary_term), cmux_term(nullptr),
mode(modem_mode::UNDEF) primary_term(std::move(terminal)),
secondary_term(primary_term),
mode(modem_mode::UNDEF)
{ {
ESP_MODEM_THROW_IF_FALSE(primary_term != nullptr, "Invalid argument: terminal cannot be null");
set_command_callbacks(); set_command_callbacks();
} }
DTE::DTE(std::unique_ptr<Terminal> terminal): DTE::DTE(std::unique_ptr<Terminal> terminal)
buffer(dte_default_buffer_size), : buffer(dte_default_buffer_size),
cmux_term(nullptr), primary_term(std::move(terminal)), secondary_term(primary_term), cmux_term(nullptr),
mode(modem_mode::UNDEF) primary_term(std::move(terminal)),
secondary_term(primary_term),
mode(modem_mode::UNDEF)
{ {
ESP_MODEM_THROW_IF_FALSE(primary_term != nullptr, "Invalid argument: terminal cannot be null");
set_command_callbacks(); set_command_callbacks();
} }
DTE::DTE(const esp_modem_dte_config *config, std::unique_ptr<Terminal> t, std::unique_ptr<Terminal> s): DTE::DTE(const esp_modem_dte_config *config, std::unique_ptr<Terminal> t, std::unique_ptr<Terminal> s)
buffer(config->dte_buffer_size), : buffer(config->dte_buffer_size),
cmux_term(nullptr), primary_term(std::move(t)), secondary_term(std::move(s)), cmux_term(nullptr),
mode(modem_mode::DUAL_MODE) primary_term(std::move(t)),
secondary_term(std::move(s)),
mode(modem_mode::DUAL_MODE)
{ {
ESP_MODEM_THROW_IF_FALSE(primary_term != nullptr, "Invalid argument: primary terminal cannot be null");
ESP_MODEM_THROW_IF_FALSE(secondary_term != nullptr, "Invalid argument: secondary terminal cannot be null");
set_command_callbacks(); set_command_callbacks();
} }
DTE::DTE(std::unique_ptr<Terminal> t, std::unique_ptr<Terminal> s): DTE::DTE(std::unique_ptr<Terminal> t, std::unique_ptr<Terminal> s)
buffer(dte_default_buffer_size), : buffer(dte_default_buffer_size),
cmux_term(nullptr), primary_term(std::move(t)), secondary_term(std::move(s)), cmux_term(nullptr),
mode(modem_mode::DUAL_MODE) primary_term(std::move(t)),
secondary_term(std::move(s)),
mode(modem_mode::DUAL_MODE)
{ {
ESP_MODEM_THROW_IF_FALSE(primary_term != nullptr, "Invalid argument: primary terminal cannot be null");
ESP_MODEM_THROW_IF_FALSE(secondary_term != nullptr, "Invalid argument: secondary terminal cannot be null");
set_command_callbacks(); set_command_callbacks();
} }
void DTE::set_command_callbacks() void DTE::set_command_callbacks()
{ {
primary_term->set_read_cb([this](uint8_t *data, size_t len) { primary_term->set_read_cb([this](uint8_t *data, size_t len) {