Skip to content

Commit e938739

Browse files
authored
Prevent nullptr dereference on OOM (#7823)
1 parent 0203dea commit e938739

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

libraries/ESP8266AVRISP/src/ESP8266AVRISP.cpp

+12-4
Original file line numberDiff line numberDiff line change
@@ -359,8 +359,12 @@ uint8_t ESP8266AVRISP::flash_read(uint8_t hilo, int addr) {
359359
0);
360360
}
361361

362-
void ESP8266AVRISP::flash_read_page(int length) {
362+
bool ESP8266AVRISP::flash_read_page(int length) {
363363
uint8_t *data = (uint8_t *) malloc(length + 1);
364+
if (!data)
365+
{
366+
return false;
367+
}
364368
for (int x = 0; x < length; x += 2) {
365369
*(data + x) = flash_read(LOW, here);
366370
*(data + x + 1) = flash_read(HIGH, here);
@@ -369,12 +373,16 @@ void ESP8266AVRISP::flash_read_page(int length) {
369373
*(data + length) = Resp_STK_OK;
370374
_client.write((const uint8_t *)data, (size_t)(length + 1));
371375
free(data);
372-
return;
376+
return true;
373377
}
374378

375-
void ESP8266AVRISP::eeprom_read_page(int length) {
379+
bool ESP8266AVRISP::eeprom_read_page(int length) {
376380
// here again we have a word address
377381
uint8_t *data = (uint8_t *) malloc(length + 1);
382+
if (!data)
383+
{
384+
return false;
385+
}
378386
int start = here * 2;
379387
for (int x = 0; x < length; x++) {
380388
int addr = start + x;
@@ -384,7 +392,7 @@ void ESP8266AVRISP::eeprom_read_page(int length) {
384392
*(data + length) = Resp_STK_OK;
385393
_client.write((const uint8_t *)data, (size_t)(length + 1));
386394
free(data);
387-
return;
395+
return true;
388396
}
389397

390398
void ESP8266AVRISP::read_page() {

libraries/ESP8266AVRISP/src/ESP8266AVRISP.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ class ESP8266AVRISP {
8989
void commit(int addr);
9090
void program_page();
9191
uint8_t flash_read(uint8_t hilo, int addr);
92-
void flash_read_page(int length);
93-
void eeprom_read_page(int length);
92+
bool flash_read_page(int length);
93+
bool eeprom_read_page(int length);
9494
void read_page();
9595
void read_signature();
9696

libraries/ESP8266WiFi/src/BearSSLHelpers.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,10 @@ namespace brssl {
526526
case BR_KEYTYPE_EC:
527527
ek = br_skey_decoder_get_ec(dc.get());
528528
sk = (private_key*)malloc(sizeof * sk);
529+
if (!sk)
530+
{
531+
return nullptr;
532+
}
529533
sk->key_type = BR_KEYTYPE_EC;
530534
sk->key.ec.curve = ek->curve;
531535
sk->key.ec.x = (uint8_t*)malloc(ek->xlen);

0 commit comments

Comments
 (0)