зеркало из https://github.com/mozilla/pjs.git
Bug 365166 - crash [@ strlen] calling mozIStorageStatement::getColumnName of a statement created with "PRAGMA user_version" or "PRAGMA schema_version". Patch by Nickolay Ponomarev <asqueella@gmail.com>. r=sdwilsh
This commit is contained in:
Родитель
4d090cb711
Коммит
2ab9f5784f
|
@ -142,10 +142,8 @@ mozStorageStatement::Initialize(mozIStorageConnection *aDBConnection, const nsAC
|
|||
|
||||
for (unsigned int i = 0; i < mResultColumnCount; i++) {
|
||||
const void *name = sqlite3_column_name16 (mDBStatement, i);
|
||||
if (name != nsnull)
|
||||
mColumnNames.AppendString(nsDependentString(NS_STATIC_CAST(const PRUnichar*, name)));
|
||||
else
|
||||
mColumnNames.AppendString(EmptyString());
|
||||
mColumnNames.AppendString(
|
||||
nsDependentString(NS_STATIC_CAST(const PRUnichar*, name)));
|
||||
}
|
||||
|
||||
// doing a sqlite3_prepare sets up the execution engine
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/licenses/publicdomain/ */
|
||||
|
||||
// Testcase for bug 365166 - crash [@ strlen] calling
|
||||
// mozIStorageStatement::getColumnName of a statement created with
|
||||
// "PRAGMA user_version" or "PRAGMA schema_version"
|
||||
function run_test() {
|
||||
test('user');
|
||||
test('schema');
|
||||
|
||||
function test(param)
|
||||
{
|
||||
var colName = param + "_version";
|
||||
var sql = "PRAGMA " + colName;
|
||||
|
||||
var file = Components.classes["@mozilla.org/file/directory_service;1"]
|
||||
.getService(Components.interfaces.nsIProperties)
|
||||
.get("TmpD", Components.interfaces.nsIFile);
|
||||
file.append("bug-365166.sqlite");
|
||||
var storageService = Components.classes["@mozilla.org/storage/service;1"].
|
||||
getService(Components.interfaces.mozIStorageService);
|
||||
var conn = storageService.openDatabase(file);
|
||||
var statement = conn.createStatement(sql);
|
||||
try {
|
||||
// This shouldn't crash:
|
||||
do_check_eq(statement.getColumnName(0), colName);
|
||||
|
||||
// OK, if the above statement didn't crash, check that initializing a
|
||||
// wrapper doesn't crash either:
|
||||
var wrapper = Components.classes["@mozilla.org/storage/statement-wrapper;1"]
|
||||
.createInstance(Components.interfaces.mozIStorageStatementWrapper);
|
||||
wrapper.initialize(statement);
|
||||
} finally {
|
||||
statement.reset();
|
||||
}
|
||||
}
|
||||
}
|
Загрузка…
Ссылка в новой задаче