Skip to content

Commit 83f6d83

Browse files
authored
Fix RTCmem example buffer access past end (#4288)
1 parent 9694b3e commit 83f6d83

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

libraries/esp8266/examples/RTCUserMemory/RTCUserMemory.ino

+6-4
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ void setup() {
3838
Serial.println("Read: ");
3939
printMemory();
4040
Serial.println();
41-
uint32_t crcOfData = calculateCRC32(((uint8_t*) &rtcData) + 4, sizeof(rtcData) - 4);
41+
uint32_t crcOfData = calculateCRC32( (uint8_t*) &rtcData.data[0], sizeof(rtcData.data) );
4242
Serial.print("CRC32 of data: ");
4343
Serial.println(crcOfData, HEX);
4444
Serial.print("CRC32 read from RTC: ");
@@ -52,11 +52,11 @@ void setup() {
5252
}
5353

5454
// Generate new data set for the struct
55-
for (int i = 0; i < sizeof(rtcData); i++) {
55+
for (int i = 0; i < sizeof(rtcData.data); i++) {
5656
rtcData.data[i] = random(0, 128);
5757
}
5858
// Update CRC32 of data
59-
rtcData.crc32 = calculateCRC32(((uint8_t*) &rtcData) + 4, sizeof(rtcData) - 4);
59+
rtcData.crc32 = calculateCRC32( (uint8_t*) &rtcData.data[0], sizeof(rtcData.data) );
6060
// Write struct to RTC memory
6161
if (ESP.rtcUserMemoryWrite(0, (uint32_t*) &rtcData, sizeof(rtcData))) {
6262
Serial.println("Write: ");
@@ -90,10 +90,12 @@ uint32_t calculateCRC32(const uint8_t *data, size_t length)
9090
return crc;
9191
}
9292

93+
//prints all rtcData, including the leading crc32
9394
void printMemory() {
9495
char buf[3];
96+
uint8_t *ptr = (uint8_t *)&rtcData;
9597
for (int i = 0; i < sizeof(rtcData); i++) {
96-
sprintf(buf, "%02X", rtcData.data[i]);
98+
sprintf(buf, "%02X", ptr[i]);
9799
Serial.print(buf);
98100
if ((i + 1) % 32 == 0) {
99101
Serial.println();

0 commit comments

Comments
 (0)