changeset 1015:d40f03b57795

6890984: Comparison of 2 arrays could cause VM crash Summary: Restore original null checks. Reviewed-by: never, cfang
author kvn
date Wed, 14 Oct 2009 15:03:32 -0700
parents 23862fc517bb
children e715b51789d8 0a46d0c5dccb
files src/cpu/sparc/vm/sparc.ad src/cpu/x86/vm/assembler_x86.cpp
diffstat 2 files changed, 5 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/sparc/vm/sparc.ad	Wed Oct 14 11:42:59 2009 -0700
+++ b/src/cpu/sparc/vm/sparc.ad	Wed Oct 14 15:03:32 2009 -0700
@@ -3016,7 +3016,7 @@
 
     // return true if the same array
     __ cmp(ary1_reg, ary2_reg);
-    __ br(Assembler::equal, true, Assembler::pn, Ldone);
+    __ brx(Assembler::equal, true, Assembler::pn, Ldone);
     __ delayed()->add(G0, 1, result_reg); // equal
 
     __ br_null(ary1_reg, true, Assembler::pn, Ldone);
--- a/src/cpu/x86/vm/assembler_x86.cpp	Wed Oct 14 11:42:59 2009 -0700
+++ b/src/cpu/x86/vm/assembler_x86.cpp	Wed Oct 14 15:03:32 2009 -0700
@@ -8634,8 +8634,10 @@
 
   if (is_array_equ) {
     // Need additional checks for arrays_equals.
-    andptr(ary1, ary2);
-    jcc(Assembler::zero, FALSE_LABEL); // One pointer is NULL
+    testptr(ary1, ary1);
+    jcc(Assembler::zero, FALSE_LABEL);
+    testptr(ary2, ary2);
+    jcc(Assembler::zero, FALSE_LABEL);
 
     // Check the lengths
     movl(limit, Address(ary1, length_offset));