test/runtime/Unsafe/RangeCheck.java

Print this page




  27  * @summary Add simple range check into VM implemenation of Unsafe access methods
  28  * @library /testlibrary
  29  */
  30 
  31 import com.oracle.java.testlibrary.*;
  32 import sun.misc.Unsafe;
  33 
  34 public class RangeCheck {
  35 
  36     public static void main(String args[]) throws Exception {
  37         if (!Platform.isDebugBuild()) {
  38             System.out.println("Testing assert which requires a debug build. Passing silently.");
  39             return;
  40         }
  41 
  42         ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
  43                 true,
  44                 "-Xmx32m",
  45                 "-XX:-TransmitErrorReport",
  46                 "-XX:-InlineUnsafeOps", // The compiler intrinsics doesn't have the assert

  47                 DummyClassWithMainRangeCheck.class.getName());
  48 
  49         OutputAnalyzer output = new OutputAnalyzer(pb.start());
  50         output.shouldMatch("assert\\(byte_offset < p_size\\) failed: Unsafe access: offset \\d+ > object's size \\d+");
  51     }
  52 
  53     public static class DummyClassWithMainRangeCheck {
  54         public static void main(String args[]) throws Exception {
  55             Unsafe unsafe = Utils.getUnsafe();
  56             unsafe.getObject(new DummyClassWithMainRangeCheck(), Short.MAX_VALUE);
  57         }
  58     }
  59 }


  27  * @summary Add simple range check into VM implemenation of Unsafe access methods
  28  * @library /testlibrary
  29  */
  30 
  31 import com.oracle.java.testlibrary.*;
  32 import sun.misc.Unsafe;
  33 
  34 public class RangeCheck {
  35 
  36     public static void main(String args[]) throws Exception {
  37         if (!Platform.isDebugBuild()) {
  38             System.out.println("Testing assert which requires a debug build. Passing silently.");
  39             return;
  40         }
  41 
  42         ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
  43                 true,
  44                 "-Xmx32m",
  45                 "-XX:-TransmitErrorReport",
  46                 "-XX:-InlineUnsafeOps", // The compiler intrinsics doesn't have the assert
  47                 "-XX:-CreateCoredumpOnCrash",
  48                 DummyClassWithMainRangeCheck.class.getName());
  49 
  50         OutputAnalyzer output = new OutputAnalyzer(pb.start());
  51         output.shouldMatch("assert\\(byte_offset < p_size\\) failed: Unsafe access: offset \\d+ > object's size \\d+");
  52     }
  53 
  54     public static class DummyClassWithMainRangeCheck {
  55         public static void main(String args[]) throws Exception {
  56             Unsafe unsafe = Utils.getUnsafe();
  57             unsafe.getObject(new DummyClassWithMainRangeCheck(), Short.MAX_VALUE);
  58         }
  59     }
  60 }