This patch fixes a bug that was added to StringBuffer recently. It also adds some regressions tests for the bug and related calls. Mo Dejong Red Hat Inc. Thu Apr 6 00:30:30 PDT 2000 Mo DeJong <[EMAIL PROTECTED]> * libraries/javalib/java/lang/StringBuffer.java: fixed special case where insert(0,...) is called on a StringBuffer of size zero. * test/regression/Str.java: Added regression tests for some calls to StringBuffer methods. Index: libraries/javalib/java/lang/StringBuffer.java =================================================================== RCS file: /cvs/kaffe/kaffe/libraries/javalib/java/lang/StringBuffer.java,v retrieving revision 1.13 diff -u -r1.13 StringBuffer.java --- libraries/javalib/java/lang/StringBuffer.java 2000/04/01 18:04:32 1.13 +++ libraries/javalib/java/lang/StringBuffer.java 2000/04/06 08:41:57 @@ -167,7 +167,9 @@ public synchronized StringBuffer insert(int index, char[] str, int offset, int len) { - checkIndex(index); + if (index != 0) { // Special case for insert(0,"str") on zero length buffer! + checkIndex(index); + } if (offset < 0 || len < 0 || offset + len > str.length) { throw new StringIndexOutOfBoundsException(); } Index: test/regression/Str.java =================================================================== RCS file: /cvs/kaffe/kaffe/test/regression/Str.java,v retrieving revision 1.2 diff -u -r1.2 Str.java --- test/regression/Str.java 1999/02/12 13:51:10 1.2 +++ test/regression/Str.java 2000/04/06 08:41:57 @@ -4,10 +4,60 @@ StringBuffer a = new StringBuffer(str); a.insert(2, "abcd"); System.out.println(a); + + a = new StringBuffer(); + a.insert(0, "Hello"); + System.out.println(a); + + a = new StringBuffer(); + try { + a.insert(-1, "Str"); + } catch (StringIndexOutOfBoundsException si) { + System.out.println("Caught -1"); + } + + a = new StringBuffer(); + try { + a.insert(1, "Str"); + } catch (StringIndexOutOfBoundsException si) { + System.out.println("Caught +1"); + } + + // Is this really an error? If I insert at the "end" + // of a StringBuffer should that throw and exception + + //a = new StringBuffer(1); + //a.insert(1, "S"); + //System.out.println(a); + + a = new StringBuffer(1); + try { + a.insert(1, "Str"); + } catch (StringIndexOutOfBoundsException si) { + System.out.println("Caught 1+1"); + } + + + // Pass -1 as the size of a StringBuffer + try { + new StringBuffer(-1); + } catch (NegativeArraySizeException e) { + System.out.println("Caught -1"); + } + + // Pass 0 as the size of a StringBuffer + new StringBuffer(0); + System.out.println("Zero OK"); } } /* Expected Output: 12abcd34567890 +Hello +Caught -1 +Caught +1 +Caught 1+1 +Caught -1 +Zero OK */