From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository. --- .../testsuite/libjava.lang/newarray_overflow.java | 88 ++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 libjava/testsuite/libjava.lang/newarray_overflow.java (limited to 'libjava/testsuite/libjava.lang/newarray_overflow.java') diff --git a/libjava/testsuite/libjava.lang/newarray_overflow.java b/libjava/testsuite/libjava.lang/newarray_overflow.java new file mode 100644 index 000000000..17370b537 --- /dev/null +++ b/libjava/testsuite/libjava.lang/newarray_overflow.java @@ -0,0 +1,88 @@ +/* This test checks for two slightly different overflow scenarios in + * array allocation. + * + * The first is that the number of bytes needed for an array size + * overflows on a 32 bit machine. + * + * The second is that on a 64 machine, the number of bytes silently + * gets truncated, resulting in too small an object being + * allocated. */ + +class newarray_overflow +{ + static boolean failed = false; + + static void int_check() + { + int[] x; + try + { + x = new int [1 << 30]; + } + catch (OutOfMemoryError e) + { + return; + } + /* If we really get away with it (64 bit machine), that's cool. */ + if (x == null) { + System.err.println ("int check: new returned null."); + failed = true; + return; + } + try + { + // Only check a few places so we don't thrash too badly. + for (int i = 0; i < x.length; i += (1 << 24)) + if (x[i] != 0) + failed = true; + } + catch (Throwable e) + { + System.err.print ("int check: "); + System.err.println (e); + failed = true; + } + } + + static void object_check() + { + Object[] x; + try + { + x = new Object [1 << 30]; + System.err.println ("Alloc succeeded."); + System.err.println (x); + } + catch (OutOfMemoryError e) + { + return; + } + /* If we really get away with it (64 bit machine), that's cool. */ + if (x == null) { + System.err.println ("Object check: new returned null."); + failed = true; + return; + } + try + { + for (int i = 0; i < x.length; i += (1 << 24)) + if (x[i] != null) + failed = true; + } + catch (Throwable e) + { + System.err.print ("Object check: "); + System.err.println (e); + failed = true; + } + } + + public static void main (String[] ignore) + { + int_check(); + object_check(); + + if (!failed) + System.out.println ("ok"); + } +} -- cgit v1.2.3