Loading core/java/android/os/HwParcel.java +3 −2 Original line number Diff line number Diff line Loading @@ -209,10 +209,11 @@ public class HwParcel { public native final IHwBinder readStrongBinder(); // Handle is stored as part of the blob. public native final HwBlob readBuffer(); public native final HwBlob readBuffer(long expectedSize); public native final HwBlob readEmbeddedBuffer( long parentHandle, long offset, boolean nullable); long expectedSize, long parentHandle, long offset, boolean nullable); public native final void writeBuffer(HwBlob blob); Loading core/jni/android_os_HwParcel.cpp +30 −19 Original line number Diff line number Diff line Loading @@ -574,7 +574,7 @@ static jstring JHwParcel_native_readString(JNIEnv *env, jobject thiz) { size_t parentHandle; const hidl_string *s; status_t err = parcel->readBuffer(&parentHandle, status_t err = parcel->readBuffer(sizeof(*s), &parentHandle, reinterpret_cast<const void**>(&s)); if (err != OK) { Loading @@ -583,7 +583,7 @@ static jstring JHwParcel_native_readString(JNIEnv *env, jobject thiz) { } err = ::android::hardware::readEmbeddedFromParcel( const_cast<hidl_string *>(s), const_cast<hidl_string &>(*s), *parcel, parentHandle, 0 /* parentOffset */); if (err != OK) { Loading @@ -602,7 +602,7 @@ static Type ## Array JHwParcel_native_read ## Suffix ## Vector( \ size_t parentHandle; \ \ const hidl_vec<Type> *vec; \ status_t err = parcel->readBuffer(&parentHandle, \ status_t err = parcel->readBuffer(sizeof(*vec), &parentHandle, \ reinterpret_cast<const void**>(&vec)); \ \ if (err != OK) { \ Loading @@ -613,7 +613,7 @@ static Type ## Array JHwParcel_native_read ## Suffix ## Vector( \ size_t childHandle; \ \ err = ::android::hardware::readEmbeddedFromParcel( \ const_cast<hidl_vec<Type> *>(vec), \ const_cast<hidl_vec<Type> &>(*vec), \ *parcel, \ parentHandle, \ 0 /* parentOffset */, \ Loading Loading @@ -645,7 +645,7 @@ static jbooleanArray JHwParcel_native_readBoolVector( size_t parentHandle; const hidl_vec<bool> *vec; status_t err = parcel->readBuffer(&parentHandle, status_t err = parcel->readBuffer(sizeof(*vec), &parentHandle, reinterpret_cast<const void**>(&vec)); if (err != OK) { Loading @@ -656,7 +656,7 @@ static jbooleanArray JHwParcel_native_readBoolVector( size_t childHandle; err = ::android::hardware::readEmbeddedFromParcel( const_cast<hidl_vec<bool> *>(vec), const_cast<hidl_vec<bool> &>(*vec), *parcel, parentHandle, 0 /* parentOffset */, Loading Loading @@ -709,7 +709,7 @@ static jobjectArray JHwParcel_native_readStringVector( size_t parentHandle; const string_vec *vec; status_t err = parcel->readBuffer(&parentHandle, status_t err = parcel->readBuffer(sizeof(*vec), &parentHandle, reinterpret_cast<const void **>(&vec)); if (err != OK) { Loading @@ -719,16 +719,15 @@ static jobjectArray JHwParcel_native_readStringVector( size_t childHandle; err = ::android::hardware::readEmbeddedFromParcel( const_cast<string_vec *>(vec), const_cast<string_vec &>(*vec), *parcel, parentHandle, 0 /* parentOffset */, &childHandle); for (size_t i = 0; (err == OK) && (i < vec->size()); ++i) { err = android::hardware::readEmbeddedFromParcel( const_cast<hidl_vec<hidl_string> *>(vec), const_cast<hidl_string &>((*vec)[i]), *parcel, childHandle, i * sizeof(hidl_string), nullptr /* childHandle */); i * sizeof(hidl_string) /* parentOffset */); } if (err != OK) { Loading Loading @@ -810,13 +809,20 @@ static jobject JHwParcel_native_readStrongBinder(JNIEnv *env, jobject thiz) { return JHwRemoteBinder::NewObject(env, binder); } static jobject JHwParcel_native_readBuffer(JNIEnv *env, jobject thiz) { static jobject JHwParcel_native_readBuffer(JNIEnv *env, jobject thiz, jlong expectedSize) { hardware::Parcel *parcel = JHwParcel::GetNativeContext(env, thiz)->getParcel(); size_t handle; const void *ptr; status_t status = parcel->readBuffer(&handle, &ptr); if (expectedSize < 0) { jniThrowException(env, "java/lang/IllegalArgumentException", NULL); return nullptr; } status_t status = parcel->readBuffer(expectedSize, &handle, &ptr); if (status != OK) { jniThrowException(env, "java/util/NoSuchElementException", NULL); Loading @@ -827,8 +833,8 @@ static jobject JHwParcel_native_readBuffer(JNIEnv *env, jobject thiz) { } static jobject JHwParcel_native_readEmbeddedBuffer( JNIEnv *env, jobject thiz, jlong parentHandle, jlong offset, jboolean nullable) { JNIEnv *env, jobject thiz, jlong expectedSize, jlong parentHandle, jlong offset, jboolean nullable) { hardware::Parcel *parcel = JHwParcel::GetNativeContext(env, thiz)->getParcel(); Loading @@ -836,8 +842,13 @@ static jobject JHwParcel_native_readEmbeddedBuffer( const void *ptr; status_t status = parcel->readNullableEmbeddedBuffer(&childHandle, parentHandle, offset, &ptr); parcel->readNullableEmbeddedBuffer(expectedSize, &childHandle, parentHandle, offset, &ptr); if (expectedSize < 0) { jniThrowException(env, "java/lang/IllegalArgumentException", NULL); return nullptr; } if (status != OK) { jniThrowException(env, "java/util/NoSuchElementException", NULL); Loading Loading @@ -952,10 +963,10 @@ static JNINativeMethod gMethods[] = { { "send", "()V", (void *)JHwParcel_native_send }, { "readBuffer", "()L" PACKAGE_PATH "/HwBlob;", { "readBuffer", "(J)L" PACKAGE_PATH "/HwBlob;", (void *)JHwParcel_native_readBuffer }, { "readEmbeddedBuffer", "(JJZ)L" PACKAGE_PATH "/HwBlob;", { "readEmbeddedBuffer", "(JJJZ)L" PACKAGE_PATH "/HwBlob;", (void *)JHwParcel_native_readEmbeddedBuffer }, { "writeBuffer", "(L" PACKAGE_PATH "/HwBlob;)V", Loading Loading
core/java/android/os/HwParcel.java +3 −2 Original line number Diff line number Diff line Loading @@ -209,10 +209,11 @@ public class HwParcel { public native final IHwBinder readStrongBinder(); // Handle is stored as part of the blob. public native final HwBlob readBuffer(); public native final HwBlob readBuffer(long expectedSize); public native final HwBlob readEmbeddedBuffer( long parentHandle, long offset, boolean nullable); long expectedSize, long parentHandle, long offset, boolean nullable); public native final void writeBuffer(HwBlob blob); Loading
core/jni/android_os_HwParcel.cpp +30 −19 Original line number Diff line number Diff line Loading @@ -574,7 +574,7 @@ static jstring JHwParcel_native_readString(JNIEnv *env, jobject thiz) { size_t parentHandle; const hidl_string *s; status_t err = parcel->readBuffer(&parentHandle, status_t err = parcel->readBuffer(sizeof(*s), &parentHandle, reinterpret_cast<const void**>(&s)); if (err != OK) { Loading @@ -583,7 +583,7 @@ static jstring JHwParcel_native_readString(JNIEnv *env, jobject thiz) { } err = ::android::hardware::readEmbeddedFromParcel( const_cast<hidl_string *>(s), const_cast<hidl_string &>(*s), *parcel, parentHandle, 0 /* parentOffset */); if (err != OK) { Loading @@ -602,7 +602,7 @@ static Type ## Array JHwParcel_native_read ## Suffix ## Vector( \ size_t parentHandle; \ \ const hidl_vec<Type> *vec; \ status_t err = parcel->readBuffer(&parentHandle, \ status_t err = parcel->readBuffer(sizeof(*vec), &parentHandle, \ reinterpret_cast<const void**>(&vec)); \ \ if (err != OK) { \ Loading @@ -613,7 +613,7 @@ static Type ## Array JHwParcel_native_read ## Suffix ## Vector( \ size_t childHandle; \ \ err = ::android::hardware::readEmbeddedFromParcel( \ const_cast<hidl_vec<Type> *>(vec), \ const_cast<hidl_vec<Type> &>(*vec), \ *parcel, \ parentHandle, \ 0 /* parentOffset */, \ Loading Loading @@ -645,7 +645,7 @@ static jbooleanArray JHwParcel_native_readBoolVector( size_t parentHandle; const hidl_vec<bool> *vec; status_t err = parcel->readBuffer(&parentHandle, status_t err = parcel->readBuffer(sizeof(*vec), &parentHandle, reinterpret_cast<const void**>(&vec)); if (err != OK) { Loading @@ -656,7 +656,7 @@ static jbooleanArray JHwParcel_native_readBoolVector( size_t childHandle; err = ::android::hardware::readEmbeddedFromParcel( const_cast<hidl_vec<bool> *>(vec), const_cast<hidl_vec<bool> &>(*vec), *parcel, parentHandle, 0 /* parentOffset */, Loading Loading @@ -709,7 +709,7 @@ static jobjectArray JHwParcel_native_readStringVector( size_t parentHandle; const string_vec *vec; status_t err = parcel->readBuffer(&parentHandle, status_t err = parcel->readBuffer(sizeof(*vec), &parentHandle, reinterpret_cast<const void **>(&vec)); if (err != OK) { Loading @@ -719,16 +719,15 @@ static jobjectArray JHwParcel_native_readStringVector( size_t childHandle; err = ::android::hardware::readEmbeddedFromParcel( const_cast<string_vec *>(vec), const_cast<string_vec &>(*vec), *parcel, parentHandle, 0 /* parentOffset */, &childHandle); for (size_t i = 0; (err == OK) && (i < vec->size()); ++i) { err = android::hardware::readEmbeddedFromParcel( const_cast<hidl_vec<hidl_string> *>(vec), const_cast<hidl_string &>((*vec)[i]), *parcel, childHandle, i * sizeof(hidl_string), nullptr /* childHandle */); i * sizeof(hidl_string) /* parentOffset */); } if (err != OK) { Loading Loading @@ -810,13 +809,20 @@ static jobject JHwParcel_native_readStrongBinder(JNIEnv *env, jobject thiz) { return JHwRemoteBinder::NewObject(env, binder); } static jobject JHwParcel_native_readBuffer(JNIEnv *env, jobject thiz) { static jobject JHwParcel_native_readBuffer(JNIEnv *env, jobject thiz, jlong expectedSize) { hardware::Parcel *parcel = JHwParcel::GetNativeContext(env, thiz)->getParcel(); size_t handle; const void *ptr; status_t status = parcel->readBuffer(&handle, &ptr); if (expectedSize < 0) { jniThrowException(env, "java/lang/IllegalArgumentException", NULL); return nullptr; } status_t status = parcel->readBuffer(expectedSize, &handle, &ptr); if (status != OK) { jniThrowException(env, "java/util/NoSuchElementException", NULL); Loading @@ -827,8 +833,8 @@ static jobject JHwParcel_native_readBuffer(JNIEnv *env, jobject thiz) { } static jobject JHwParcel_native_readEmbeddedBuffer( JNIEnv *env, jobject thiz, jlong parentHandle, jlong offset, jboolean nullable) { JNIEnv *env, jobject thiz, jlong expectedSize, jlong parentHandle, jlong offset, jboolean nullable) { hardware::Parcel *parcel = JHwParcel::GetNativeContext(env, thiz)->getParcel(); Loading @@ -836,8 +842,13 @@ static jobject JHwParcel_native_readEmbeddedBuffer( const void *ptr; status_t status = parcel->readNullableEmbeddedBuffer(&childHandle, parentHandle, offset, &ptr); parcel->readNullableEmbeddedBuffer(expectedSize, &childHandle, parentHandle, offset, &ptr); if (expectedSize < 0) { jniThrowException(env, "java/lang/IllegalArgumentException", NULL); return nullptr; } if (status != OK) { jniThrowException(env, "java/util/NoSuchElementException", NULL); Loading Loading @@ -952,10 +963,10 @@ static JNINativeMethod gMethods[] = { { "send", "()V", (void *)JHwParcel_native_send }, { "readBuffer", "()L" PACKAGE_PATH "/HwBlob;", { "readBuffer", "(J)L" PACKAGE_PATH "/HwBlob;", (void *)JHwParcel_native_readBuffer }, { "readEmbeddedBuffer", "(JJZ)L" PACKAGE_PATH "/HwBlob;", { "readEmbeddedBuffer", "(JJJZ)L" PACKAGE_PATH "/HwBlob;", (void *)JHwParcel_native_readEmbeddedBuffer }, { "writeBuffer", "(L" PACKAGE_PATH "/HwBlob;)V", Loading