1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-03 07:02:28 +03:00

Fix RTCmem example buffer access past end (#4288)

This commit is contained in:
Develo 2018-02-06 20:54:03 -03:00 committed by GitHub
parent 9694b3e688
commit 83f6d83db0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -38,7 +38,7 @@ void setup() {
Serial.println("Read: ");
printMemory();
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.println(crcOfData, HEX);
Serial.print("CRC32 read from RTC: ");
@ -52,11 +52,11 @@ void setup() {
}
// 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);
}
// 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
if (ESP.rtcUserMemoryWrite(0, (uint32_t*) &rtcData, sizeof(rtcData))) {
Serial.println("Write: ");
@ -90,10 +90,12 @@ uint32_t calculateCRC32(const uint8_t *data, size_t length)
return crc;
}
//prints all rtcData, including the leading crc32
void printMemory() {
char buf[3];
uint8_t *ptr = (uint8_t *)&rtcData;
for (int i = 0; i < sizeof(rtcData); i++) {
sprintf(buf, "%02X", rtcData.data[i]);
sprintf(buf, "%02X", ptr[i]);
Serial.print(buf);
if ((i + 1) % 32 == 0) {
Serial.println();