Bug 865106 - Remove allocator mismatch when freeing asprintf allocated buffers. r=kats

This commit is contained in:
Mike Hommey 2013-04-24 19:35:22 +02:00
parent beabd37d57
commit 93db2e2330
2 changed files with 22 additions and 4 deletions

View File

@ -13,6 +13,13 @@
#include "ElfLoader.h"
#ifdef MOZ_MEMORY
// libc's free().
extern "C" void __real_free(void *);
#else
#define __real_free(a) free(a)
#endif
#ifdef DEBUG
#define LOG(x...) __android_log_print(ANDROID_LOG_INFO, "GeckoJNI", x)
#else
@ -84,7 +91,8 @@ throwError(JNIEnv* jenv, const char * funcString) {
LOG("Throwing error: %s\n", msg);
JNI_Throw(jenv, "java/lang/Exception", msg);
free(msg);
// msg is allocated by asprintf, it needs to be freed by libc.
__real_free(msg);
LOG("Error thrown\n");
}

View File

@ -11,6 +11,13 @@
#include "ElfLoader.h"
#include "SQLiteBridge.h"
#ifdef MOZ_MEMORY
// libc's free().
extern "C" void __real_free(void *);
#else
#define __real_free(a) free(a)
#endif
#ifdef DEBUG
#define LOG(x...) __android_log_print(ANDROID_LOG_INFO, "GeckoJNI", x)
#else
@ -150,7 +157,8 @@ Java_org_mozilla_gecko_sqlite_SQLiteBridge_sqliteCall(JNIEnv* jenv, jclass,
asprintf(&errorMsg, "Can't open database: %s\n", f_sqlite3_errmsg(db));
LOG("Error in SQLiteBridge: %s\n", errorMsg);
JNI_Throw(jenv, "org/mozilla/gecko/sqlite/SQLiteBridgeException", errorMsg);
free(errorMsg);
// errorMsg is allocated by asprintf, it needs to be freed by libc.
__real_free(errorMsg);
} else {
jCursor = sqliteInternalCall(jenv, db, jQuery, jParams, jQueryRes);
}
@ -191,7 +199,8 @@ Java_org_mozilla_gecko_sqlite_SQLiteBridge_openDatabase(JNIEnv* jenv, jclass,
asprintf(&errorMsg, "Can't open database: %s\n", f_sqlite3_errmsg(db));
LOG("Error in SQLiteBridge: %s\n", errorMsg);
JNI_Throw(jenv, "org/mozilla/gecko/sqlite/SQLiteBridgeException", errorMsg);
free(errorMsg);
// errorMsg is allocated by asprintf, it needs to be freed by libc.
__real_free(errorMsg);
}
return (jlong)db;
}
@ -394,6 +403,7 @@ sqliteInternalCall(JNIEnv* jenv,
error_close:
LOG("Error in SQLiteBridge: %s\n", errorMsg);
JNI_Throw(jenv, "org/mozilla/gecko/sqlite/SQLiteBridgeException", errorMsg);
free(errorMsg);
// errorMsg is allocated by asprintf, it needs to be freed by libc.
__real_free(errorMsg);
return jCursor;
}