mirror of
https://github.com/esp8266/Arduino.git
synced 2025-06-06 05:21:22 +03:00
Fix RTCmem example buffer access past end (#4288)
This commit is contained in:
parent
9694b3e688
commit
83f6d83db0
@ -38,7 +38,7 @@ void setup() {
|
|||||||
Serial.println("Read: ");
|
Serial.println("Read: ");
|
||||||
printMemory();
|
printMemory();
|
||||||
Serial.println();
|
Serial.println();
|
||||||
uint32_t crcOfData = calculateCRC32(((uint8_t*) &rtcData) + 4, sizeof(rtcData) - 4);
|
uint32_t crcOfData = calculateCRC32( (uint8_t*) &rtcData.data[0], sizeof(rtcData.data) );
|
||||||
Serial.print("CRC32 of data: ");
|
Serial.print("CRC32 of data: ");
|
||||||
Serial.println(crcOfData, HEX);
|
Serial.println(crcOfData, HEX);
|
||||||
Serial.print("CRC32 read from RTC: ");
|
Serial.print("CRC32 read from RTC: ");
|
||||||
@ -52,11 +52,11 @@ void setup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Generate new data set for the struct
|
// Generate new data set for the struct
|
||||||
for (int i = 0; i < sizeof(rtcData); i++) {
|
for (int i = 0; i < sizeof(rtcData.data); i++) {
|
||||||
rtcData.data[i] = random(0, 128);
|
rtcData.data[i] = random(0, 128);
|
||||||
}
|
}
|
||||||
// Update CRC32 of data
|
// Update CRC32 of data
|
||||||
rtcData.crc32 = calculateCRC32(((uint8_t*) &rtcData) + 4, sizeof(rtcData) - 4);
|
rtcData.crc32 = calculateCRC32( (uint8_t*) &rtcData.data[0], sizeof(rtcData.data) );
|
||||||
// Write struct to RTC memory
|
// Write struct to RTC memory
|
||||||
if (ESP.rtcUserMemoryWrite(0, (uint32_t*) &rtcData, sizeof(rtcData))) {
|
if (ESP.rtcUserMemoryWrite(0, (uint32_t*) &rtcData, sizeof(rtcData))) {
|
||||||
Serial.println("Write: ");
|
Serial.println("Write: ");
|
||||||
@ -90,10 +90,12 @@ uint32_t calculateCRC32(const uint8_t *data, size_t length)
|
|||||||
return crc;
|
return crc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//prints all rtcData, including the leading crc32
|
||||||
void printMemory() {
|
void printMemory() {
|
||||||
char buf[3];
|
char buf[3];
|
||||||
|
uint8_t *ptr = (uint8_t *)&rtcData;
|
||||||
for (int i = 0; i < sizeof(rtcData); i++) {
|
for (int i = 0; i < sizeof(rtcData); i++) {
|
||||||
sprintf(buf, "%02X", rtcData.data[i]);
|
sprintf(buf, "%02X", ptr[i]);
|
||||||
Serial.print(buf);
|
Serial.print(buf);
|
||||||
if ((i + 1) % 32 == 0) {
|
if ((i + 1) % 32 == 0) {
|
||||||
Serial.println();
|
Serial.println();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user