forked from espressif/esp-protocols
Merge pull request #768 from deodatomatheus/fix/handle-nullptr-dte-constructors
fix(modem): handle nullptr in DTE constructors to prevent invalid access (IDFGH-14688)
This commit is contained in:
@ -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) {
|
||||||
|
Reference in New Issue
Block a user