Fix String::replace()
Fixes: https://github.com/espressif/arduino-esp32/issues/4920
This commit is contained in:
parent
f815a7c636
commit
93d5b8c672
@ -744,6 +744,7 @@ void String::replace(const String& find, const String& replace) {
|
|||||||
}
|
}
|
||||||
} else if(diff < 0) {
|
} else if(diff < 0) {
|
||||||
char *writeTo = wbuffer();
|
char *writeTo = wbuffer();
|
||||||
|
unsigned int l = len();
|
||||||
while((foundAt = strstr(readFrom, find.buffer())) != NULL) {
|
while((foundAt = strstr(readFrom, find.buffer())) != NULL) {
|
||||||
unsigned int n = foundAt - readFrom;
|
unsigned int n = foundAt - readFrom;
|
||||||
memmove(writeTo, readFrom, n);
|
memmove(writeTo, readFrom, n);
|
||||||
@ -751,9 +752,10 @@ void String::replace(const String& find, const String& replace) {
|
|||||||
memmove(writeTo, replace.buffer(), replace.len());
|
memmove(writeTo, replace.buffer(), replace.len());
|
||||||
writeTo += replace.len();
|
writeTo += replace.len();
|
||||||
readFrom = foundAt + find.len();
|
readFrom = foundAt + find.len();
|
||||||
setLen(len() + diff);
|
l += diff;
|
||||||
}
|
}
|
||||||
memmove(writeTo, readFrom, strlen(readFrom)+1);
|
memmove(writeTo, readFrom, strlen(readFrom)+1);
|
||||||
|
setLen(l);
|
||||||
} else {
|
} else {
|
||||||
unsigned int size = len(); // compute size needed for result
|
unsigned int size = len(); // compute size needed for result
|
||||||
while((foundAt = strstr(readFrom, find.buffer())) != NULL) {
|
while((foundAt = strstr(readFrom, find.buffer())) != NULL) {
|
||||||
@ -768,7 +770,7 @@ void String::replace(const String& find, const String& replace) {
|
|||||||
while(index >= 0 && (index = lastIndexOf(find, index)) >= 0) {
|
while(index >= 0 && (index = lastIndexOf(find, index)) >= 0) {
|
||||||
readFrom = wbuffer() + index + find.len();
|
readFrom = wbuffer() + index + find.len();
|
||||||
memmove(readFrom + diff, readFrom, len() - (readFrom - buffer()));
|
memmove(readFrom + diff, readFrom, len() - (readFrom - buffer()));
|
||||||
int newLen = len() + diff;
|
int newLen = len() + diff;
|
||||||
memmove(wbuffer() + index, replace.buffer(), replace.len());
|
memmove(wbuffer() + index, replace.buffer(), replace.len());
|
||||||
setLen(newLen);
|
setLen(newLen);
|
||||||
wbuffer()[newLen] = 0;
|
wbuffer()[newLen] = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user