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