Skip to content

Commit 22a488c

Browse files
committed
Fix String::clear() not clearing the string properly
Fixes: espressif#4893
1 parent 6e7cc52 commit 22a488c

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

‎cores/esp32/WString.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,9 @@ String::~String(){
130130

131131
inlinevoidString::init(void){
132132
setSSO(false);
133+
setBuffer(nullptr);
133134
setCapacity(0);
134135
setLen(0);
135-
setBuffer(nullptr);
136136
}
137137

138138
voidString::invalidate(void){

‎cores/esp32/WString.h‎

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,9 +301,19 @@ class String{
301301
inlineunsignedintlen() const{returnisSSO() ? sso.len : ptr.len}
302302
inlineunsignedintcapacity() const{returnisSSO() ? (unsignedint)SSOSIZE - 1 : ptr.cap} // Size of max string not including terminal NUL
303303
inlinevoidsetSSO(bool set){sso.isSSO = set}
304-
inlinevoidsetLen(int len){if (isSSO()) sso.len = len; else ptr.len = len}
304+
inlinevoidsetLen(int len){
305+
if (isSSO()){
306+
sso.len = len;
307+
sso.buff[len] = 0;
308+
} else{
309+
ptr.len = len;
310+
if (ptr.buff){
311+
ptr.buff[len] = 0;
312+
}
313+
}
314+
}
305315
inlinevoidsetCapacity(int cap){if (!isSSO()) ptr.cap = cap}
306-
inlinevoidsetBuffer(char *buff){if (!isSSO()) ptr.buff = buff}
316+
inlinevoidsetBuffer(char *buff){if (!isSSO()) ptr.buff = buff}
307317
// Buffer accessor functions
308318
inlineconstchar *buffer() const{return (constchar *)(isSSO() ? sso.buff : ptr.buff)}
309319
inlinechar *wbuffer() const{returnisSSO() ? const_cast<char *>(sso.buff) : ptr.buff} // Writable version of buffer

0 commit comments

Comments
(0)