mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-03 04:27:41 +00:00
Bug 865106 - Remove allocator mismatch when freeing asprintf allocated buffers. r=kats
This commit is contained in:
parent
beabd37d57
commit
93db2e2330
@ -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");
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user