[kaffe] CVS kaffe (robilad): Fix for array index checking in interpreter
Kaffe CVS
cvs-commits at kaffe.org
Fri Feb 4 06:48:49 PST 2005
PatchSet 5970
Date: 2005/02/04 14:43:21
Author: robilad
Branch: HEAD
Tag: (none)
Log:
Fix for array index checking in interpreter
2005-02-04 Dalibor Topic <robilad at kaffe.org>
* kaffe/kaffevm/intrp/icode.h (check_array_index):
Turned into a proper static inline funtion. Cleaned up
and documented. Made it throw an ArrayIndexOutOfBounds
exception for negative index values. That fixes a
problem detected by OfBiz 3 on powerpc-linux-intrp.
Members:
ChangeLog:1.3509->1.3510
kaffe/kaffevm/intrp/icode.h:1.21->1.22
Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.3509 kaffe/ChangeLog:1.3510
--- kaffe/ChangeLog:1.3509 Fri Feb 4 10:36:11 2005
+++ kaffe/ChangeLog Fri Feb 4 14:43:21 2005
@@ -1,5 +1,13 @@
2005-02-04 Dalibor Topic <robilad at kaffe.org>
+ * kaffe/kaffevm/intrp/icode.h (check_array_index):
+ Turned into a proper static inline funtion. Cleaned up
+ and documented. Made it throw an ArrayIndexOutOfBounds
+ exception for negative index values. That fixes a
+ problem detected by OfBiz 3 on powerpc-linux-intrp.
+
+2005-02-04 Dalibor Topic <robilad at kaffe.org>
+
* kaffe/kaffevm/classMethod.c (retry):
Removed unused variables.
Index: kaffe/kaffe/kaffevm/intrp/icode.h
diff -u kaffe/kaffe/kaffevm/intrp/icode.h:1.21 kaffe/kaffe/kaffevm/intrp/icode.h:1.22
--- kaffe/kaffe/kaffevm/intrp/icode.h:1.21 Thu Aug 19 19:29:03 2004
+++ kaffe/kaffe/kaffevm/intrp/icode.h Fri Feb 4 14:43:23 2005
@@ -12,6 +12,9 @@
#ifndef __icode_h
#define __icode_h
+#include "slots.h"
+#include "soft.h"
+
#define move_long_const(t, c) (t)[0].v.tlong = (c)
#define add_long(t, f1, f2) (t)[0].v.tlong = (f1)[0].v.tlong + (f2)[0].v.tlong
#define sub_long(t, f1, f2) (t)[0].v.tlong = (f1)[0].v.tlong - (f2)[0].v.tlong
@@ -305,9 +308,25 @@
#define adjustpc(a) /* Not needed for interpreter */
-#define check_array_index(O, I) if ((I)[0].v.tint >= ARRAY_SIZE((O)[0].v.taddr)) { \
- soft_badarrayindex(); \
- }
+/* check if an array index is out of bounds.
+ *
+ * it is out of bounds if the index is less then zero
+ * or if it is larger or equal to the size of the array
+ * to be indexed.
+ */
+static inline void check_array_index(const slots* array_slot,
+ const slots* index_slot)
+{
+ const jint array_index = index_slot->v.tint;
+ const void* array_reference = array_slot->v.taddr;
+
+ if (array_index < 0 ||
+ array_index >= ARRAY_SIZE(array_reference))
+ {
+ soft_badarrayindex();
+ }
+}
+
#define build_call_frame(SIG, OBJ, NRARGS) /* Not needed for interpreter */
More information about the kaffe
mailing list