Fix pointer arithmetic for ByteBuffers with non-zero positions
When initializing a gpu resource from a Java ByteBuffer with a non-zero position, most functions aren't releasing the correct pointer and subsequently crash the app. Bug: 67109954 Test: build, flash, atest android.opengl.cts.ByteBufferTest Change-Id: Id0910efd8c5ed6e00ea10eab89e77d97fe642d2b
This commit is contained in:
@@ -640,7 +640,7 @@ android_glCompressedTexImage2D__IIIIIIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, data, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)data - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -684,7 +684,7 @@ android_glCompressedTexSubImage2D__IIIIIIIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, data, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)data - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -929,7 +929,7 @@ android_glDrawElements__IIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, indices, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)indices - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -2801,7 +2801,8 @@ android_glReadPixels__IIIIIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, pixels, _exception ? JNI_FALSE : JNI_TRUE);
|
||||
releasePointer(_env, _array, (void *)((char *)pixels - _bufferOffset),
|
||||
_exception ? JNI_FALSE : JNI_TRUE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -3241,7 +3242,7 @@ android_glTexImage2D__IIIIIIIILjava_nio_Buffer_2
|
||||
(GLvoid *)pixels
|
||||
);
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, pixels, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)pixels - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -3301,7 +3302,7 @@ android_glTexSubImage2D__IIIIIIIILjava_nio_Buffer_2
|
||||
(GLvoid *)pixels
|
||||
);
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, pixels, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)pixels - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
|
||||
@@ -464,7 +464,7 @@ android_glBufferData__IILjava_nio_Buffer_2I
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, data, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)data - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -509,7 +509,7 @@ android_glBufferSubData__IIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, data, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)data - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
|
||||
@@ -893,7 +893,8 @@ android_glEGLImageTargetTexture2DOES__ILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, image, _exception ? JNI_FALSE : JNI_TRUE);
|
||||
releasePointer(_env, _array, (void *)((char *)image - _bufferOffset),
|
||||
_exception ? JNI_FALSE : JNI_TRUE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -930,7 +931,8 @@ android_glEGLImageTargetRenderbufferStorageOES__ILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, image, _exception ? JNI_FALSE : JNI_TRUE);
|
||||
releasePointer(_env, _array, (void *)((char *)image - _bufferOffset),
|
||||
_exception ? JNI_FALSE : JNI_TRUE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
|
||||
@@ -599,7 +599,7 @@ android_glBufferData__IILjava_nio_Buffer_2I
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, data, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)data - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -644,7 +644,7 @@ android_glBufferSubData__IIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, data, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)data - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -758,7 +758,7 @@ android_glCompressedTexImage2D__IIIIIIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, data, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)data - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -802,7 +802,7 @@ android_glCompressedTexSubImage2D__IIIIIIIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, data, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)data - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -1379,7 +1379,7 @@ android_glDrawElements__IIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, indices, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)indices - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -4273,7 +4273,8 @@ android_glReadPixels__IIIIIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, pixels, _exception ? JNI_FALSE : JNI_TRUE);
|
||||
releasePointer(_env, _array, (void *)((char *)pixels - _bufferOffset),
|
||||
_exception ? JNI_FALSE : JNI_TRUE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -4380,7 +4381,7 @@ android_glShaderBinary__I_3IIILjava_nio_Buffer_2I
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, binary, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)binary - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (shaders_base) {
|
||||
_env->ReleaseIntArrayElements(shaders_ref, (jint*)shaders_base,
|
||||
@@ -4445,7 +4446,8 @@ android_glShaderBinary__ILjava_nio_IntBuffer_2ILjava_nio_Buffer_2I
|
||||
|
||||
exit:
|
||||
if (_binaryArray) {
|
||||
releasePointer(_env, _binaryArray, binary, JNI_FALSE);
|
||||
releasePointer(_env, _binaryArray, (void *)((char *)binary - _binaryBufferOffset),
|
||||
JNI_FALSE);
|
||||
}
|
||||
if (_shadersArray) {
|
||||
_env->ReleaseIntArrayElements(_shadersArray, (jint*)shaders, JNI_ABORT);
|
||||
@@ -4568,7 +4570,7 @@ android_glTexImage2D__IIIIIIIILjava_nio_Buffer_2
|
||||
(GLvoid *)pixels
|
||||
);
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, pixels, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)pixels - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -4816,7 +4818,7 @@ android_glTexSubImage2D__IIIIIIIILjava_nio_Buffer_2
|
||||
(GLvoid *)pixels
|
||||
);
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, pixels, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)pixels - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
|
||||
@@ -463,7 +463,7 @@ android_glDrawRangeElements__IIIIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, indices, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)indices - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -516,7 +516,7 @@ android_glTexImage3D__IIIIIIIIILjava_nio_Buffer_2
|
||||
(GLvoid *)pixels
|
||||
);
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, pixels, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)pixels - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -580,7 +580,7 @@ android_glTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, pixels, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)pixels - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -660,7 +660,7 @@ android_glCompressedTexImage3D__IIIIIIIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, data, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)data - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -723,7 +723,7 @@ android_glCompressedTexSubImage3D__IIIIIIIIIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, data, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)data - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -5445,7 +5445,8 @@ android_glGetProgramBinary__II_3II_3IILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, binary, _exception ? JNI_FALSE : JNI_TRUE);
|
||||
releasePointer(_env, _array, (void *)((char *)binary - _bufferOffset),
|
||||
_exception ? JNI_FALSE : JNI_TRUE);
|
||||
}
|
||||
if (binaryFormat_base) {
|
||||
_env->ReleaseIntArrayElements(binaryFormat_ref, (jint*)binaryFormat_base,
|
||||
@@ -5519,7 +5520,8 @@ android_glGetProgramBinary__IILjava_nio_IntBuffer_2Ljava_nio_IntBuffer_2Ljava_ni
|
||||
|
||||
exit:
|
||||
if (_binaryArray) {
|
||||
releasePointer(_env, _binaryArray, binary, _exception ? JNI_FALSE : JNI_TRUE);
|
||||
releasePointer(_env, _binaryArray, (void *)((char *)binary - _binaryBufferOffset),
|
||||
_exception ? JNI_FALSE : JNI_TRUE);
|
||||
}
|
||||
if (_binaryFormatArray) {
|
||||
_env->ReleaseIntArrayElements(_binaryFormatArray, (jint*)binaryFormat, _exception ? JNI_ABORT : 0);
|
||||
@@ -5564,7 +5566,7 @@ android_glProgramBinary__IILjava_nio_Buffer_2I
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, binary, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)binary - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
|
||||
@@ -863,7 +863,7 @@ android_glDrawElementsBaseVertex__IIILjava_nio_Buffer_2I
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, indices, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)indices - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -911,7 +911,7 @@ android_glDrawRangeElementsBaseVertex__IIIIILjava_nio_Buffer_2I
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, indices, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)indices - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -1048,7 +1048,8 @@ android_glReadnPixels__IIIIIIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, data, _exception ? JNI_FALSE : JNI_TRUE);
|
||||
releasePointer(_env, _array, (void *)((char *)data - _bufferOffset),
|
||||
_exception ? JNI_FALSE : JNI_TRUE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
|
||||
@@ -424,7 +424,7 @@ android_glCompressedTexImage2D__IIIIIIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, data, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)data - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -468,7 +468,7 @@ android_glCompressedTexSubImage2D__IIIIIIIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, data, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)data - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -713,7 +713,7 @@ android_glDrawElements__IIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, indices, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)indices - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -3488,7 +3488,8 @@ android_glReadPixels__IIIIIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, pixels, _exception ? JNI_FALSE : JNI_TRUE);
|
||||
releasePointer(_env, _array, (void *)((char *)pixels - _bufferOffset),
|
||||
_exception ? JNI_FALSE : JNI_TRUE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -3972,7 +3973,7 @@ android_glTexImage2D__IIIIIIIILjava_nio_Buffer_2
|
||||
(GLvoid *)pixels
|
||||
);
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, pixels, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)pixels - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -4032,7 +4033,7 @@ android_glTexSubImage2D__IIIIIIIILjava_nio_Buffer_2
|
||||
(GLvoid *)pixels
|
||||
);
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, pixels, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)pixels - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -4299,7 +4300,7 @@ android_glBufferData__IILjava_nio_Buffer_2I
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, data, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)data - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
@@ -4344,7 +4345,7 @@ android_glBufferSubData__IIILjava_nio_Buffer_2
|
||||
|
||||
exit:
|
||||
if (_array) {
|
||||
releasePointer(_env, _array, data, JNI_FALSE);
|
||||
releasePointer(_env, _array, (void *)((char *)data - _bufferOffset), JNI_FALSE);
|
||||
}
|
||||
if (_exception) {
|
||||
jniThrowException(_env, _exceptionType, _exceptionMessage);
|
||||
|
||||
Reference in New Issue
Block a user