mirror of
https://github.com/esp8266/Arduino.git
synced 2025-07-10 04:22:05 +03:00
Fix Updater potential overflow, add host tests (#6954)
* Fix Updater potential overflow, add host tests Fixes #4674 The Updater class could, when exactly 4K bytes were in the buffer but not yet written to flash, allow overwriting data written to it beyond the passed-in size parameter. Fix per @jason-but's suggestion, and add a host test (plus minor changes to Updater code to support host testing). * Add missed mock file * Remove most testing ifdefs fro updater Per @mcspr's suggestion, we can pass in fake link symbols allowing Updater to take the address of `_FS_start`/etc. even when building on the host for testing. There is still a single remaining wifi_set_power_mode ifdef'd and a duplication of the digitalWrite/pinMode for testing vs. host building. Co-authored-by: Develo <deveyes@gmail.com>
This commit is contained in:
committed by
GitHub
parent
5e537e5783
commit
5bc3079217
@ -104,7 +104,9 @@ bool UpdaterClass::begin(size_t size, int command, int ledPin, uint8_t ledOn) {
|
||||
_reset();
|
||||
clearError(); // _error = 0
|
||||
|
||||
#ifndef HOST_MOCK
|
||||
wifi_set_sleep_type(NONE_SLEEP_T);
|
||||
#endif
|
||||
|
||||
//address where we will start writing the update
|
||||
uintptr_t updateStartAddress = 0;
|
||||
@ -378,9 +380,7 @@ size_t UpdaterClass::write(uint8_t *data, size_t len) {
|
||||
if(hasError() || !isRunning())
|
||||
return 0;
|
||||
|
||||
if(len > remaining()){
|
||||
//len = remaining();
|
||||
//fail instead
|
||||
if(progress() + _bufferLen + len > _size) {
|
||||
_setError(UPDATE_ERROR_SPACE);
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user