@@ -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