You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/06/17 09:41:23 UTC

svn commit: r785496 - in /commons/sandbox/runtime/trunk/src/main: java/org/apache/commons/runtime/Pointer.java native/shared/memory.c

Author: mturk
Date: Wed Jun 17 07:41:23 2009
New Revision: 785496

URL: http://svn.apache.org/viewvc?rev=785496&view=rev
Log:
Protect memory access

Modified:
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java
    commons/sandbox/runtime/trunk/src/main/native/shared/memory.c

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java?rev=785496&r1=785495&r2=785496&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java Wed Jun 17 07:41:23 2009
@@ -26,7 +26,7 @@
 
     /*
      * Pointer can only be created from the native code.
-     * Suppress any instantiation except form internal classes.
+     * Suppress any instantiation except from internal classes.
      */
     protected Pointer()
     {
@@ -36,6 +36,10 @@
     private native void cleanup0()
         throws Throwable;
 
+	/* Used for finalize only.
+     * Doesn't throw exception in case of error
+     * returned from internal cleanup callback.
+     */
     private native void cleanup1()
         throws Throwable;
 

Modified: commons/sandbox/runtime/trunk/src/main/native/shared/memory.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/memory.c?rev=785496&r1=785495&r2=785496&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/memory.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/memory.c Wed Jun 17 07:41:23 2009
@@ -17,6 +17,7 @@
 #include "acr.h"
 #include "acr_private.h"
 #include "acr_memory.h"
+#define  ACR_WANT_MEMPROTECT
 #include "acr_error.h"
 #include "acr_pointer.h"
 #include "acr_vm.h"
@@ -352,7 +353,7 @@
                                              jobject src, jlong off,
                                              jlong siz)
 {
-    jobject po;
+    jobject po = NULL;
     size_t  so  = (size_t)off;
     size_t  ss  = (size_t)siz;
     size_t  sl;
@@ -380,8 +381,12 @@
         return NULL;
     }
     /* Copy the original content */
-    memcpy(dp, sp + so, ss);
-    po = ACR_PointerCreate(_E, dp, ss, memory_pointer_cleanup);
+    ACR_TRY {
+        memcpy(dp, sp + so, ss);
+        po = ACR_PointerCreate(_E, dp, ss, memory_pointer_cleanup);
+    } ACR_CATCH() {
+        ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ERUNTIME, EFAULT);
+    }
     if (!po) {
         /* Destroy the the memory we failed to attach
          * to the new Pointer object.
@@ -420,7 +425,11 @@
     }
 
     /* Do a memcpy */
-    memcpy(d + dn, s + sn, cs);
+    ACR_TRY {
+        memcpy(d + dn, s + sn, cs);
+    } ACR_CATCH() {
+        ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ERUNTIME, EFAULT);
+    }
 }
 
 ACR_JNI_EXPORT_DECLARE(void, Memory, move)(ACR_JNISTDARGS, jobject src,
@@ -453,7 +462,11 @@
     }
 
     /* Do a memmove */
-    memmove(d + dn, s + sn, cs);
+    ACR_TRY {
+        memmove(d + dn, s + sn, cs);
+    } ACR_CATCH() {
+        ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ERUNTIME, EFAULT);
+    }
 }
 
 ACR_JNI_EXPORT_DECLARE(void, Memory, clear)(ACR_JNISTDARGS, jobject dst,
@@ -477,7 +490,11 @@
         return;
     }
     /* Do a memset */
-    memset(d + dn, 0, cs);
+    ACR_TRY {
+        memset(d + dn, 0, cs);
+    } ACR_CATCH() {
+        ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ERUNTIME, EFAULT);
+    }
 }
 
 ACR_JNI_EXPORT_DECLARE(void, Memory, set)(ACR_JNISTDARGS, jobject dst,
@@ -501,7 +518,11 @@
         return;
     }
     /* Do a memset */
-    memset(d + dn, c, cs);
+    ACR_TRY {
+        memset(d + dn, c, cs);
+    } ACR_CATCH() {
+        ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ERUNTIME, EFAULT);
+    }
 }
 
 ACR_JNI_EXPORT_DECLARE(jbyteArray, Memory, array0)(ACR_JNISTDARGS, jobject ptr,