1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-07-20 10:24:18 +03:00

Prevent nullptr dereference on OOM (#7823)

This commit is contained in:
Paulo Cabral Sanz
2021-01-12 19:55:57 -03:00
committed by GitHub
parent 0203dea024
commit e938739115
3 changed files with 18 additions and 6 deletions

View File

@ -359,8 +359,12 @@ uint8_t ESP8266AVRISP::flash_read(uint8_t hilo, int addr) {
0); 0);
} }
void ESP8266AVRISP::flash_read_page(int length) { bool ESP8266AVRISP::flash_read_page(int length) {
uint8_t *data = (uint8_t *) malloc(length + 1); uint8_t *data = (uint8_t *) malloc(length + 1);
if (!data)
{
return false;
}
for (int x = 0; x < length; x += 2) { for (int x = 0; x < length; x += 2) {
*(data + x) = flash_read(LOW, here); *(data + x) = flash_read(LOW, here);
*(data + x + 1) = flash_read(HIGH, here); *(data + x + 1) = flash_read(HIGH, here);
@ -369,12 +373,16 @@ void ESP8266AVRISP::flash_read_page(int length) {
*(data + length) = Resp_STK_OK; *(data + length) = Resp_STK_OK;
_client.write((const uint8_t *)data, (size_t)(length + 1)); _client.write((const uint8_t *)data, (size_t)(length + 1));
free(data); free(data);
return; return true;
} }
void ESP8266AVRISP::eeprom_read_page(int length) { bool ESP8266AVRISP::eeprom_read_page(int length) {
// here again we have a word address // here again we have a word address
uint8_t *data = (uint8_t *) malloc(length + 1); uint8_t *data = (uint8_t *) malloc(length + 1);
if (!data)
{
return false;
}
int start = here * 2; int start = here * 2;
for (int x = 0; x < length; x++) { for (int x = 0; x < length; x++) {
int addr = start + x; int addr = start + x;
@ -384,7 +392,7 @@ void ESP8266AVRISP::eeprom_read_page(int length) {
*(data + length) = Resp_STK_OK; *(data + length) = Resp_STK_OK;
_client.write((const uint8_t *)data, (size_t)(length + 1)); _client.write((const uint8_t *)data, (size_t)(length + 1));
free(data); free(data);
return; return true;
} }
void ESP8266AVRISP::read_page() { void ESP8266AVRISP::read_page() {

View File

@ -89,8 +89,8 @@ protected:
void commit(int addr); void commit(int addr);
void program_page(); void program_page();
uint8_t flash_read(uint8_t hilo, int addr); uint8_t flash_read(uint8_t hilo, int addr);
void flash_read_page(int length); bool flash_read_page(int length);
void eeprom_read_page(int length); bool eeprom_read_page(int length);
void read_page(); void read_page();
void read_signature(); void read_signature();

View File

@ -526,6 +526,10 @@ namespace brssl {
case BR_KEYTYPE_EC: case BR_KEYTYPE_EC:
ek = br_skey_decoder_get_ec(dc.get()); ek = br_skey_decoder_get_ec(dc.get());
sk = (private_key*)malloc(sizeof * sk); sk = (private_key*)malloc(sizeof * sk);
if (!sk)
{
return nullptr;
}
sk->key_type = BR_KEYTYPE_EC; sk->key_type = BR_KEYTYPE_EC;
sk->key.ec.curve = ek->curve; sk->key.ec.curve = ek->curve;
sk->key.ec.x = (uint8_t*)malloc(ek->xlen); sk->key.ec.x = (uint8_t*)malloc(ek->xlen);