Add null checking for filedescriptor helpers.
- Check for a null descriptor passed in to
jniGetFdFromFileDescriptor
- Make sure we don't segfault if we can't allocate
a new java object in jniGetFileDescriptorFromFd.
Change-Id: Ic420ce76695f9526833dac98e1813c37c167306d
diff --git a/JNIHelp.cpp b/JNIHelp.cpp
index b010d07..fab95df 100644
--- a/JNIHelp.cpp
+++ b/JNIHelp.cpp
@@ -308,14 +308,22 @@
JNIEnv* e = reinterpret_cast<JNIEnv*>(env);
static jmethodID ctor = e->GetMethodID(JniConstants::fileDescriptorClass, "<init>", "()V");
jobject fileDescriptor = (*env)->NewObject(e, JniConstants::fileDescriptorClass, ctor);
- jniSetFileDescriptorOfFD(env, fileDescriptor, fd);
+ // NOTE: NewObject ensures that an OutOfMemoryError will be seen by the Java
+ // caller if the alloc fails, so we just return NULL when that happens.
+ if (fileDescriptor != NULL) {
+ jniSetFileDescriptorOfFD(env, fileDescriptor, fd);
+ }
return fileDescriptor;
}
int jniGetFDFromFileDescriptor(C_JNIEnv* env, jobject fileDescriptor) {
JNIEnv* e = reinterpret_cast<JNIEnv*>(env);
static jfieldID fid = e->GetFieldID(JniConstants::fileDescriptorClass, "descriptor", "I");
- return (*env)->GetIntField(e, fileDescriptor, fid);
+ if (fileDescriptor != NULL) {
+ return (*env)->GetIntField(e, fileDescriptor, fid);
+ } else {
+ return -1;
+ }
}
void jniSetFileDescriptorOfFD(C_JNIEnv* env, jobject fileDescriptor, int value) {