Author: mturk Date: Wed Jun 17 07:49:23 2009 New Revision: 785500 URL: http://svn.apache.org/viewvc?rev=785500&view=rev Log: Protect critical memory access
Modified: commons/sandbox/runtime/trunk/src/main/native/shared/dbb.c Modified: commons/sandbox/runtime/trunk/src/main/native/shared/dbb.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/dbb.c?rev=785500&r1=785499&r2=785500&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/shared/dbb.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/shared/dbb.c Wed Jun 17 07:49:23 2009 @@ -408,8 +408,14 @@ if ((mem = (*_E)->GetDirectBufferAddress(_E, bb)) != NULL) { /* This can cause core dump if address was * allocated using different method. + * Make sure you call Native.enableExceptionHandler() to + * throw an exception instead. */ - free(mem); + ACR_TRY { + free(mem); + } ACR_CATCH() { + ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ERUNTIME, EFAULT); + } } else { ACR_ThrowException(_E, THROW_FMARK, ACR_EX_ENULL, @@ -452,7 +458,11 @@ return; } if ((m = (*_E)->GetDirectBufferAddress(_E, bb))) { - memset(m, c, (size_t)count); + ACR_TRY { + memset(m, c, (size_t)count); + } ACR_CATCH() { + ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ERUNTIME, EFAULT); + } } else { ACR_ThrowException(_E, THROW_FMARK, ACR_EX_ENULL, @@ -497,7 +507,12 @@ } if ((s = (*_E)->GetDirectBufferAddress(_E, srcb))) { if ((d = (*_E)->GetDirectBufferAddress(_E, dstb))) { - memcpy((char *)d + (size_t)dsto, (char *)s + (size_t)srco, (size_t)count); + ACR_TRY { + memcpy((char *)d + (size_t)dsto, (char *)s + (size_t)srco, + (size_t)count); + } ACR_CATCH() { + ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ERUNTIME, EFAULT); + } } else { ACR_ThrowException(_E, THROW_FMARK, ACR_EX_ENULL,