We cannot rely on arrays and fields to be smaller than a page in size
for this test to work, i.e.

        byte[] a = null;
        a[4096] = ...;

must still throw NullPointerException.

Signed-off-by: Vegard Nossum <vegard.nos...@gmail.com>
---
 include/vm/object.h |    7 ++++++-
 vm/signal.c         |    2 +-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/include/vm/object.h b/include/vm/object.h
index 9bb4b93..864f7c3 100644
--- a/include/vm/object.h
+++ b/include/vm/object.h
@@ -13,7 +13,10 @@ enum vm_type;
 
 struct vm_object {
        /* For arrays, this points to the array type, e.g. for int arrays,
-        * this points to the (artificial) class named "[I". */
+        * this points to the (artificial) class named "[I". We actually rely
+        * on this being the first field in the struct, because this way we
+        * don't need a null-pointer check for accessing this object whenever
+        * we access ->class first. */
        struct vm_class *class;
 
        pthread_mutex_t mutex;
@@ -22,6 +25,8 @@ struct vm_object {
        uint8_t fields[];
 };
 
+/* XXX: BUILD_BUG_ON(offsetof(vm_object, class) != 0); */
+
 int init_vm_objects(void);
 
 struct vm_object *vm_object_alloc(struct vm_class *class);
diff --git a/vm/signal.c b/vm/signal.c
index da2b6d4..cba8460 100644
--- a/vm/signal.c
+++ b/vm/signal.c
@@ -98,7 +98,7 @@ static void sigsegv_handler(int sig, siginfo_t *si, void *ctx)
 
        /* Assume that zero-page access is caused by dereferencing a
           null pointer */
-       if ((unsigned long)si->si_addr < (unsigned long)getpagesize()) {
+       if (!si->si_addr) {
                /* We must be extra caucious here because IP might be
                   invalid */
                if (get_signal_source_cu(ctx) == NULL)
-- 
1.6.0.6


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time, 
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Jatovm-devel mailing list
Jatovm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jatovm-devel

Reply via email to