Skip to content

Commit d33b221

Browse files
authored
Fix crash when using String::move on empty string (espressif#10938)
Fixes: espressif#10938
1 parent 6fcaf69 commit d33b221

File tree

1 file changed

+6
-10
lines changed

1 file changed

+6
-10
lines changed

cores/esp32/WString.cpp

+6-10
Original file line numberDiff line numberDiff line change
@@ -238,16 +238,15 @@ String &String::copy(const char *cstr, unsigned int length) {
238238
#ifdef __GXX_EXPERIMENTAL_CXX0X__
239239
void String::move(String &rhs) {
240240
if (buffer()) {
241-
if (capacity() >= rhs.len()) {
241+
if (capacity() >= rhs.len() && rhs.len() && rhs.buffer()) {
242242
memmove(wbuffer(), rhs.buffer(), rhs.length() + 1);
243243
setLen(rhs.len());
244244
rhs.invalidate();
245245
return;
246-
} else {
247-
if (!isSSO()) {
248-
free(wbuffer());
249-
setBuffer(nullptr);
250-
}
246+
}
247+
if (!isSSO()) {
248+
free(wbuffer());
249+
setBuffer(nullptr);
251250
}
252251
}
253252
if (rhs.isSSO()) {
@@ -259,10 +258,7 @@ void String::move(String &rhs) {
259258
}
260259
setCapacity(rhs.capacity());
261260
setLen(rhs.len());
262-
rhs.setSSO(false);
263-
rhs.setCapacity(0);
264-
rhs.setBuffer(nullptr);
265-
rhs.setLen(0);
261+
rhs.init();
266262
}
267263
#endif
268264

0 commit comments

Comments
 (0)