@@ -744,16 +744,18 @@ void String::replace(const String& find, const String& replace){
744744 }
745745 } else if (diff < 0 ){
746746char *writeTo = wbuffer ();
747+ unsigned int l = len ();
747748while ((foundAt = strstr (readFrom, find.buffer ())) != NULL ){
748749unsigned int n = foundAt - readFrom;
749750memmove (writeTo, readFrom, n);
750751 writeTo += n;
751752memmove (writeTo, replace.buffer (), replace.len ());
752753 writeTo += replace.len ();
753754 readFrom = foundAt + find.len ();
754- setLen ( len () + diff) ;
755+ l += diff;
755756 }
756757memmove (writeTo, readFrom, strlen (readFrom)+1 );
758+ setLen (l);
757759 } else {
758760unsigned int size = len (); // compute size needed for result
759761while ((foundAt = strstr (readFrom, find.buffer ())) != NULL ){
@@ -768,7 +770,7 @@ void String::replace(const String& find, const String& replace){
768770while (index >= 0 && (index = lastIndexOf (find, index)) >= 0 ){
769771 readFrom = wbuffer () + index + find.len ();
770772memmove (readFrom + diff, readFrom, len () - (readFrom - buffer ()));
771- int newLen = len () + diff;
773+ int newLen = len () + diff;
772774memmove (wbuffer () + index, replace.buffer (), replace.len ());
773775setLen (newLen);
774776wbuffer ()[newLen] = 0 ;
0 commit comments