mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-25 20:02:37 +03:00
Calling String::reserve() causes a crash if String object was in invalidated state. Per the comment on the method's declaration in ESP_SSD1306.h, This method was supposed to recover invalidated strings. This change fixes the edge case bug in String::changeBuffer() which is the root cause of the crash exposed from String::reserve(). Following test code was used to reproduce the problem and also to validate the fix: String result; while(true){ char c = 'A'; result += c; // the loop will cause malloc() to fail at some point. if (result.c_str()==0) { Serial.println("String INVALIDATED!!!!!"); result.reserve(0); // before fix, this would crash. Serial.println("Trying to empty...."); result=""; Serial.println("Emptied!!!!"); break; } }