Bug 751262 - Guard against leaking memory if NewDirectByteBuffer fails. r=blassey a=mfinkle
--- a/mozglue/android/nsGeckoUtils.cpp
+++ b/mozglue/android/nsGeckoUtils.cpp
@@ -61,17 +61,24 @@ Java_org_mozilla_gecko_GeckoAppShell_put
jenv->ReleaseStringUTFChars(map, str);
}
extern "C"
__attribute__ ((visibility("default")))
jobject JNICALL
Java_org_mozilla_gecko_GeckoAppShell_allocateDirectBuffer(JNIEnv *jenv, jclass, jlong size)
{
- return jenv->NewDirectByteBuffer(malloc(size), size);
+ jobject buffer = NULL;
+ void* mem = malloc(size);
+ if (mem) {
+ buffer = jenv->NewDirectByteBuffer(mem, size);
+ if (!buffer)
+ free(mem);
+ }
+ return buffer;
}
extern "C"
__attribute__ ((visibility("default")))
void JNICALL
Java_org_mozilla_gecko_GeckoAppShell_freeDirectBuffer(JNIEnv *jenv, jclass, jobject buf)
{
free(jenv->GetDirectBufferAddress(buf));
@@ -102,9 +109,9 @@ Java_org_mozilla_gecko_GeckoAppShell_unl
// Release any existing lock in the file
if (result != -1 && lock.l_type == F_WRLCK) {
lock.l_type = F_UNLCK;
fcntl(fd, F_SETLK, &lock);
}
close(fd);
-}
\ No newline at end of file
+}