Signed-off-by: Tomek Grabiec <[email protected]>
---
arch/x86/insn-selector_32.brg | 2 --
vm/class.c | 26 +++++++++++++++++++++-----
2 files changed, 21 insertions(+), 7 deletions(-)
diff --git a/arch/x86/insn-selector_32.brg b/arch/x86/insn-selector_32.brg
index f900515..8a73256 100644
--- a/arch/x86/insn-selector_32.brg
+++ b/arch/x86/insn-selector_32.brg
@@ -1182,9 +1182,7 @@ stmt: STMT_ARRAY_CHECK(array_check)
select_insn(s, tree, reg_insn(INSN_PUSH_REG, index));
select_insn(s, tree, reg_insn(INSN_PUSH_REG, ref));
select_insn(s, tree, rel_insn(INSN_CALL_REL, (unsigned long)
check_array));
-
method_args_cleanup(s, tree, 2);
- select_exception_test(s, tree);
}
stmt: STMT_IF(reg)
diff --git a/vm/class.c b/vm/class.c
index 90b9184..15fab23 100644
--- a/vm/class.c
+++ b/vm/class.c
@@ -76,13 +76,29 @@ unsigned long is_object_instance_of(struct object *obj,
struct object *type)
void check_array(struct object *obj, unsigned int index)
{
- struct classblock *cb = CLASS_CB(obj->class);
+ unsigned int array_len;
+ struct classblock *cb;
+ char index_str[32];
- if (!IS_ARRAY(cb))
- abort();
+ cb = CLASS_CB(obj->class);
- if (index >= ARRAY_LEN(obj))
- abort();
+ if (!IS_ARRAY(cb)) {
+ signal_new_exception("java/lang/RuntimeException",
+ "object is not an array");
+ goto throw;
+ }
+
+ array_len = ARRAY_LEN(obj);
+
+ if (index < array_len)
+ return;
+
+ sprintf(index_str, "%d > %d", index, array_len - 1);
+ signal_new_exception("java/lang/ArrayIndexOutOfBoundsException",
+ index_str);
+
+ throw:
+ throw_from_native(sizeof(struct object *) + sizeof(unsigned int));
}
void check_cast(struct object *obj, struct object *type)
--
1.6.0.6
------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Jatovm-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel