JNI: NewDirectByteBuffer should allow 0 length buffers.
This makes the implementation symmetric with direct
buffers allocated from java.
- GetDirectBufferAddress returns the address of the buffer
passed in to NewDirectByteBuffer (and not NULL).
- GetDirectBufferCapaticy returns 0.
bug: https://code.google.com/p/android/issues/detail?id=63055
Change-Id: I55b24623ec4f7670972fed898ea097934c6c0b5f
diff --git a/test/JniTest/jni_test.cc b/test/JniTest/jni_test.cc
index d15e180..33af94b 100644
--- a/test/JniTest/jni_test.cc
+++ b/test/JniTest/jni_test.cc
@@ -17,6 +17,7 @@
#include <assert.h>
#include <stdio.h>
#include <pthread.h>
+#include <vector>
#include "jni.h"
@@ -125,3 +126,14 @@
assert(miranda_method != NULL);
return env->ToReflectedMethod(abstract_class, miranda_method, JNI_FALSE);
}
+
+// https://code.google.com/p/android/issues/detail?id=63055
+extern "C" void JNICALL Java_JniTest_testZeroLengthByteBuffers(JNIEnv* env, jclass) {
+ std::vector<uint8_t> buffer(1);
+ jobject byte_buffer = env->NewDirectByteBuffer(&buffer[0], 0);
+ assert(byte_buffer != NULL);
+ assert(!env->ExceptionCheck());
+
+ assert(env->GetDirectBufferAddress(byte_buffer) == &buffer[0]);
+ assert(env->GetDirectBufferCapacity(byte_buffer) == 0);
+}