Index: java/lang/StringBuffer.java =================================================================== RCS file: /cvsroot/classpath/classpath/java/lang/StringBuffer.java,v retrieving revision 1.25 diff -u -b -B -r1.25 StringBuffer.java --- java/lang/StringBuffer.java 18 Oct 2003 08:45:37 -0000 1.25 +++ java/lang/StringBuffer.java 27 Feb 2004 11:29:51 -0000 @@ -1,5 +1,6 @@ /* StringBuffer.java -- Growable strings - Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 + Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -205,10 +206,26 @@ if (newLength < 0) throw new StringIndexOutOfBoundsException(newLength); + int valueLength = value.length; + + /* Always call ensureCapacity_unsynchronized in order to preserve + copy-on-write semantics. */ ensureCapacity_unsynchronized(newLength); + + if (newLength < valueLength) + { + /* If the StringBuffer's value just grew, then we know that + value is newly allocated and the region between count and + newLength is filled with '\0'. */ + count = newLength; + } + else + { + /* The StringBuffer's value doesn't need to grow. However, + we should clear out any cruft that may exist. */ while (count < newLength) value[count++] = '\0'; - count = newLength; + } } /**