You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@harmony.apache.org by "Svetlana Samoilenko (JIRA)" <ji...@apache.org> on 2006/02/14 06:10:08 UTC

[jira] Created: (HARMONY-90) StringBuffer.setLength(int) doesn't throw IndexOutOfBoundsException if the argument is negative

StringBuffer.setLength(int) doesn't throw IndexOutOfBoundsException if the argument is negative
-----------------------------------------------------------------------------------------------

         Key: HARMONY-90
         URL: http://issues.apache.org/jira/browse/HARMONY-90
     Project: Harmony
        Type: Bug
  Components: Classlib  
    Reporter: Svetlana Samoilenko


According to j2se 1.4.2 and 1.5 specification java.lang.StringBuffer.setLength(int) must throw IndexOutOfBoundsException if the argument is negative

Code to reproduce: 
public class test2 { 
    public static void main(String[] args) throws Exception {  
        StringBuffer buffer = new StringBuffer("abcde");           
        try {
            buffer.setLength(-1);
            System.out.println("FAIL. IndexOutOfBoundsException must be thrown.");  
        } catch (IndexOutOfBoundsException e) {
            System.out.println("PASS. "+e);  
        }  
    }
}

Steps to Reproduce: 
1. Build Harmony (check-out on 2006-01-30) j2se subset as described in README.txt. 
2. Compile test2.java using BEA 1.4 javac 
> javac -d . test2.java 
3. Run java using compatible VM (J9) 
> java -showversion test2

Output: 
C:\tmp>C:\jrockit-j2sdk1.4.2_04\bin\java.exe -showversion test2 
java version "1.4.2_04" 
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05) 
BEA WebLogic JRockit(TM) 1.4.2_04 JVM (build ari-31788-20040616-1132-win-ia32, Native Threads, GC strategy: parallel) 
PASS. java.lang.StringIndexOutOfBoundsException: String index out of range: -1

C:\tmp>C:\harmony\trunk\deploy\jre\bin\java -showversion test2 
(c) Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable. 
FAIL. IndexOutOfBoundsException must be thrown

Suggected fix:
Index: trunk/modules/luni/src/main/java/java/lang/StringBuffer.java
===================================================================
---   trunk/modules/luni/src/main/java/java/lang/StringBuffer.java   (revision 377365)
+++ trunk/modules/luni/src/main/java/java/lang/StringBuffer.java   (working copy)
@@ -798,7 +798,10 @@
             * @see #length
             */
            public synchronized void setLength(int length) {
-           if (length > value.length)
+              if (length < 0) {
+                  throw new IndexOutOfBoundsException("argument is negative");
+              }           
+              if (length > value.length)

Suggested junit test case:
------------------------ StringBufferTest.java ------------------------------------------------- 
import junit.framework.*; 

public class StringBufferTest extends TestCase { 
    public static void main(String[] args) { 
        junit.textui.TestRunner.run(StringBuffer.class); 
    } 
    public void test_read () { 
        StringBuffer buffer = new StringBuffer("abcde");           
        try {
            buffer.setLength(-1);
            fail("IndexOutOfBoundsException must be thrown");  
        } catch (IndexOutOfBoundsException e) {
            //expected
        }    
    } 
}



-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Assigned: (HARMONY-90) StringBuffer.setLength(int) doesn't throw IndexOutOfBoundsException if the argument is negative

Posted by "Tim Ellison (JIRA)" <ji...@apache.org>.
     [ http://issues.apache.org/jira/browse/HARMONY-90?page=all ]

Tim Ellison reassigned HARMONY-90:
----------------------------------

    Assign To: Tim Ellison

> StringBuffer.setLength(int) doesn't throw IndexOutOfBoundsException if the argument is negative
> -----------------------------------------------------------------------------------------------
>
>          Key: HARMONY-90
>          URL: http://issues.apache.org/jira/browse/HARMONY-90
>      Project: Harmony
>         Type: Bug
>   Components: Classlib
>     Reporter: Svetlana Samoilenko
>     Assignee: Tim Ellison

>
> According to j2se 1.4.2 and 1.5 specification java.lang.StringBuffer.setLength(int) must throw IndexOutOfBoundsException if the argument is negative
> Code to reproduce: 
> public class test2 { 
>     public static void main(String[] args) throws Exception {  
>         StringBuffer buffer = new StringBuffer("abcde");           
>         try {
>             buffer.setLength(-1);
>             System.out.println("FAIL. IndexOutOfBoundsException must be thrown.");  
>         } catch (IndexOutOfBoundsException e) {
>             System.out.println("PASS. "+e);  
>         }  
>     }
> }
> Steps to Reproduce: 
> 1. Build Harmony (check-out on 2006-01-30) j2se subset as described in README.txt. 
> 2. Compile test2.java using BEA 1.4 javac 
> > javac -d . test2.java 
> 3. Run java using compatible VM (J9) 
> > java -showversion test2
> Output: 
> C:\tmp>C:\jrockit-j2sdk1.4.2_04\bin\java.exe -showversion test2 
> java version "1.4.2_04" 
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05) 
> BEA WebLogic JRockit(TM) 1.4.2_04 JVM (build ari-31788-20040616-1132-win-ia32, Native Threads, GC strategy: parallel) 
> PASS. java.lang.StringIndexOutOfBoundsException: String index out of range: -1
> C:\tmp>C:\harmony\trunk\deploy\jre\bin\java -showversion test2 
> (c) Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable. 
> FAIL. IndexOutOfBoundsException must be thrown
> Suggected fix:
> Index: trunk/modules/luni/src/main/java/java/lang/StringBuffer.java
> ===================================================================
> ---   trunk/modules/luni/src/main/java/java/lang/StringBuffer.java   (revision 377365)
> +++ trunk/modules/luni/src/main/java/java/lang/StringBuffer.java   (working copy)
> @@ -798,7 +798,10 @@
>              * @see #length
>              */
>             public synchronized void setLength(int length) {
> -           if (length > value.length)
> +              if (length < 0) {
> +                  throw new IndexOutOfBoundsException("argument is negative");
> +              }           
> +              if (length > value.length)
> Suggested junit test case:
> ------------------------ StringBufferTest.java ------------------------------------------------- 
> import junit.framework.*; 
> public class StringBufferTest extends TestCase { 
>     public static void main(String[] args) { 
>         junit.textui.TestRunner.run(StringBuffer.class); 
>     } 
>     public void test_read () { 
>         StringBuffer buffer = new StringBuffer("abcde");           
>         try {
>             buffer.setLength(-1);
>             fail("IndexOutOfBoundsException must be thrown");  
>         } catch (IndexOutOfBoundsException e) {
>             //expected
>         }    
>     } 
> }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Resolved: (HARMONY-90) StringBuffer.setLength(int) doesn't throw IndexOutOfBoundsException if the argument is negative

Posted by "Tim Ellison (JIRA)" <ji...@apache.org>.
     [ http://issues.apache.org/jira/browse/HARMONY-90?page=all ]
     
Tim Ellison resolved HARMONY-90:
--------------------------------

    Resolution: Cannot Reproduce

Svetlana,

The test you gave works for me, and I've added it as a regression test.
If you still have this problem let me know and I'll happily re-open the issue.

Tim

> StringBuffer.setLength(int) doesn't throw IndexOutOfBoundsException if the argument is negative
> -----------------------------------------------------------------------------------------------
>
>          Key: HARMONY-90
>          URL: http://issues.apache.org/jira/browse/HARMONY-90
>      Project: Harmony
>         Type: Bug
>   Components: Classlib
>     Reporter: Svetlana Samoilenko
>     Assignee: Tim Ellison

>
> According to j2se 1.4.2 and 1.5 specification java.lang.StringBuffer.setLength(int) must throw IndexOutOfBoundsException if the argument is negative
> Code to reproduce: 
> public class test2 { 
>     public static void main(String[] args) throws Exception {  
>         StringBuffer buffer = new StringBuffer("abcde");           
>         try {
>             buffer.setLength(-1);
>             System.out.println("FAIL. IndexOutOfBoundsException must be thrown.");  
>         } catch (IndexOutOfBoundsException e) {
>             System.out.println("PASS. "+e);  
>         }  
>     }
> }
> Steps to Reproduce: 
> 1. Build Harmony (check-out on 2006-01-30) j2se subset as described in README.txt. 
> 2. Compile test2.java using BEA 1.4 javac 
> > javac -d . test2.java 
> 3. Run java using compatible VM (J9) 
> > java -showversion test2
> Output: 
> C:\tmp>C:\jrockit-j2sdk1.4.2_04\bin\java.exe -showversion test2 
> java version "1.4.2_04" 
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05) 
> BEA WebLogic JRockit(TM) 1.4.2_04 JVM (build ari-31788-20040616-1132-win-ia32, Native Threads, GC strategy: parallel) 
> PASS. java.lang.StringIndexOutOfBoundsException: String index out of range: -1
> C:\tmp>C:\harmony\trunk\deploy\jre\bin\java -showversion test2 
> (c) Copyright 1991, 2005 The Apache Software Foundation or its licensors, as applicable. 
> FAIL. IndexOutOfBoundsException must be thrown
> Suggected fix:
> Index: trunk/modules/luni/src/main/java/java/lang/StringBuffer.java
> ===================================================================
> ---   trunk/modules/luni/src/main/java/java/lang/StringBuffer.java   (revision 377365)
> +++ trunk/modules/luni/src/main/java/java/lang/StringBuffer.java   (working copy)
> @@ -798,7 +798,10 @@
>              * @see #length
>              */
>             public synchronized void setLength(int length) {
> -           if (length > value.length)
> +              if (length < 0) {
> +                  throw new IndexOutOfBoundsException("argument is negative");
> +              }           
> +              if (length > value.length)
> Suggested junit test case:
> ------------------------ StringBufferTest.java ------------------------------------------------- 
> import junit.framework.*; 
> public class StringBufferTest extends TestCase { 
>     public static void main(String[] args) { 
>         junit.textui.TestRunner.run(StringBuffer.class); 
>     } 
>     public void test_read () { 
>         StringBuffer buffer = new StringBuffer("abcde");           
>         try {
>             buffer.setLength(-1);
>             fail("IndexOutOfBoundsException must be thrown");  
>         } catch (IndexOutOfBoundsException e) {
>             //expected
>         }    
>     } 
> }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira