mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			141 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Java
		
	
	
	
| class String_overflow
 | |
| {
 | |
|   static void getChars()
 | |
|   {
 | |
|     String source = "abcdefg";
 | |
|     char[] dest = new char [3];
 | |
| 
 | |
|     try
 | |
|       {
 | |
| 	source.getChars (0, 5,	// Source
 | |
| 			 dest, (1<<31) - 1);
 | |
| 	Fail ("getChars", "Should not have succeeded");
 | |
|       }
 | |
|     catch (Throwable e)
 | |
|       {
 | |
| 	ExpectArrayIndex ("getChars", e);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|     /* How do I stop a compiler warning causing a test to fail?
 | |
|   static void getBytes()
 | |
|   {
 | |
|     String source = "abcdefg";
 | |
|     byte[] dest = new byte[3];
 | |
| 
 | |
|     try
 | |
|       {
 | |
| 	source.getBytes (0, 5, dest, (1<<31) - 1);
 | |
| 	Fail ("getBytes", "Should not have succeeded");
 | |
|       }
 | |
|     catch (Throwable e)
 | |
|       {
 | |
| 	ExpectArrayIndex ("getBytes", e);
 | |
|       }
 | |
|   }
 | |
|     */
 | |
| 
 | |
|   static void regionMatches()
 | |
|   {
 | |
|     if ("abcdefg".regionMatches (4, "abcdefg", 4, -1))
 | |
|       {
 | |
| 	Fail ("regionMatches", "Should not return true");
 | |
|       }
 | |
| 
 | |
|     try
 | |
|       {
 | |
| 	if ("abcdefg".regionMatches (4, "abcdefg", 4, (1<<31)-1))
 | |
| 	  {
 | |
| 	    Fail ("regionMatches (2nd)", "Should not return true");
 | |
| 	  }
 | |
|       }
 | |
|     catch (Throwable e)
 | |
|       {
 | |
| 	Fail ("regionMatches (2nd)", e);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   static void regionMatchesCase()
 | |
|   {
 | |
|     if ("abcdefg".regionMatches (true, 4, "abcdefg", 4, -1))
 | |
|       {
 | |
| 	Fail ("regionMatchesCase", "Should not return true");
 | |
|       }
 | |
| 
 | |
|     try
 | |
|       {
 | |
| 	if ("abcdefg".regionMatches (true, 4, "abcdefg", 4, (1<<31)-1))
 | |
| 	  {
 | |
| 	    Fail ("regionMatchesCase (2nd)", "Should not return true");
 | |
| 	  }
 | |
|       }
 | |
|     catch (Throwable e)
 | |
|       {
 | |
| 	Fail ("regionMatchesCase (2nd)", e);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   static void startsWith()
 | |
|   {
 | |
|     // We make the arg pretty big to try and cause a segfault.
 | |
|     String s = new String ("abcdef");
 | |
|     StringBuffer b = new StringBuffer (1000000);
 | |
|     b.setLength (1000000);
 | |
|     String arg = new String (b);
 | |
| 
 | |
|     try
 | |
|       {
 | |
| 	s.startsWith (arg, (1<<31) - 1000000);
 | |
|       }
 | |
|     catch (Throwable e)
 | |
|       {
 | |
| 	Fail ("startsWith", e);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   static void valueOf()
 | |
|   {
 | |
|     char[] array = new char[] {'a', 'b', 'c', 'd', 'e'};
 | |
|     try
 | |
|       {
 | |
| 	String.valueOf (array, 4, (1<<31)-1);
 | |
| 	Fail ("valueOf", "should not succeed");
 | |
|       }
 | |
|     catch (Throwable e)
 | |
|       {
 | |
| 	ExpectArrayIndex ("valueOf", e);
 | |
|       }
 | |
|   }
 | |
| 
 | |
|   public static void main (String[] args) throws Throwable
 | |
|   {
 | |
|     getChars();
 | |
|     //    getBytes();
 | |
|     regionMatches();
 | |
|     regionMatchesCase();
 | |
|     startsWith();
 | |
|     valueOf();
 | |
| 
 | |
|     if (tests_failed == 0)
 | |
|       System.out.println ("ok");
 | |
|   }
 | |
| 
 | |
|   static void ExpectArrayIndex (String test, Throwable e)
 | |
|   {
 | |
|     if (e instanceof ArrayIndexOutOfBoundsException)
 | |
|       return;
 | |
| 
 | |
|     Fail (test, e);
 | |
|   }
 | |
| 
 | |
|   static void Fail (String test, Object problem)
 | |
|   {
 | |
|     ++tests_failed;
 | |
|     System.err.print (test);
 | |
|     System.err.print ('\t');
 | |
|     System.err.println (problem);
 | |
|   }
 | |
| 
 | |
|   static int tests_failed;
 | |
| }
 |