Attention, un changement d’API dans
sqlite peut faire planter
firefox (et
thunderbird en certain cas).
Testé sous FreeBSD, firefox-72.0.2_1,1 + sqlite3-3.31.0 :
Code:david:~>lldb --core firefox.core /usr/local/bin/firefox
(lldb) target create "/usr/local/bin/firefox" --core "firefox.core"
Core file '/home/david/firefox.core' (x86_64) was loaded.
(lldb) bt
* thread #1, name = 'firefox', stop reason = signal SIGSEGV
* frame #0: 0x00000008013c80da libc.so.7`__sys_thr_kill at thr_kill.S:3
frame #1: 0x00000008013c64e4 libc.so.7`__raise(s=11) at raise.c:52:10
frame #2: 0x000000080ae8b385 libxul.so`nsProfileLock::FatalSignalHandler(int, __siginfo*, void*) + 245
frame #3: 0x000000080b871858 libxul.so`WasmTrapHandler(int, __siginfo*, void*) + 344
frame #4: 0x000000080120129c libthr.so.3`handle_signal(actp=0x00007fffffff5040, sig=11, info=0x00007fffffff5430, ucp=0x00007fffffff50c0) at thr_sig.c:246:3
frame #5: 0x00000008012008ac libthr.so.3`thr_sighandler(sig=11, info=0x00007fffffff5430, _ucp=0x00007fffffff50c0) at thr_sig.c:191:2
frame #6: 0x00007ffffffff193
frame #7: 0x0000000807fc7283 libxul.so`(anonymous namespace)::xOpen(sqlite3_vfs*, char const*, sqlite3_file*, int, int*) + 435
frame #8: 0x000000080dc73d19 libsqlite3.so.0`___lldb_unnamed_symbol216$$libsqlite3.so.0 + 489
frame #9: 0x000000080dc4be0b libsqlite3.so.0`sqlite3_result_null + 27
frame #10: 0x000000080dc7fbdd libsqlite3.so.0`___lldb_unnamed_symbol262$$libsqlite3.so.0 + 15229
frame #11: 0x000000080dc4fee5 libsqlite3.so.0`___lldb_unnamed_symbol44$$libsqlite3.so.0 + 453
frame #12: 0x000000080dc56f88 libsqlite3.so.0`sqlite3_declare_vtab + 712
frame #13: 0x0000000807fc14d9 libxul.so`mozilla::storage::Connection::executeSql(sqlite3*, char const*) + 105
frame #14: 0x0000000807fc16a5 libxul.so`mozilla::storage::Connection::ExecuteSimpleSQL(nsTSubstring<char> const&) + 133
frame #15: 0x000000080acd5374 libxul.so`mozilla::places::Database::EnsureFaviconsDatabaseAttached(nsCOMPtr<mozIStorageService> const&) + 820
frame #16: 0x000000080acd36d6 libxul.so`mozilla::places::Database::SetupDatabaseConnection(nsCOMPtr<mozIStorageService>&) + 502
frame #17: 0x000000080acd27d9 libxul.so`mozilla::places::Database::EnsureConnection() + 1193
frame #18: 0x000000080ad0b54b libxul.so`non-virtual thunk to nsNavHistory::GetDBConnection(mozIStorageConnection**) + 27
frame #19: 0x000000080778d676 libxul.so`NS_InvokeByIndex + 142
frame #20: 0x0000000807f97638 libxul.so`XPCWrappedNative::CallMethod(XPCCallContext&, XPCWrappedNative::CallMode) + 3816
frame #21: 0x0000000807f98f0f libxul.so`XPC_WN_GetterSetter(JSContext*, unsigned int, JS::Value*) + 687
frame #22: 0x000000080af9d74c libxul.so`js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct, js::CallReason) + 716
frame #23: 0x000000080af9e907 libxul.so`js::CallGetter(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, JS::MutableHandle<JS::Value>) + 231
frame #24: 0x000000080b1acb0e libxul.so`js::NativeGetProperty(JSContext*, JS::Handle<js::NativeObject*>, JS::Handle<JS::Value>, JS::Handle<JS::PropertyKey>, JS::MutableHandle<JS::Value>) + 3182
frame #25: 0x000000080af93f7b libxul.so`Interpret(JSContext*, js::RunState&) + 42939
frame #26: 0x000000080af8960e libxul.so`js::RunScript(JSContext*, js::RunState&) + 254
frame #27: 0x000000080af9dbea libxul.so`js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct, js::CallReason) + 1898
frame #28: 0x000000080af9e10c libxul.so`js::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, js::AnyInvokeArgs const&, JS::MutableHandle<JS::Value>, js::CallReason) + 44
frame #29: 0x000000080b0706a0 libxul.so`js::ScriptedProxyHandler::get(JSContext*, JS::Handle<JSObject*>, JS::Handle<JS::Value>, JS::Handle<JS::PropertyKey>, JS::MutableHandle<JS::Value>) const + 704
frame #30: 0x000000080b069793 libxul.so`js::Proxy::get(JSContext*, JS::Handle<JSObject*>, JS::Handle<JS::Value>, JS::Handle<JS::PropertyKey>, JS::MutableHandle<JS::Value>) + 387
frame #31: 0x000000080afa0c48 libxul.so`js::GetProperty(JSContext*, JS::Handle<JS::Value>, JS::Handle<js::PropertyName*>, JS::MutableHandle<JS::Value>) + 1288
frame #32: 0x000000080af92449 libxul.so`Interpret(JSContext*, js::RunState&) + 35977
frame #33: 0x000000080af8960e libxul.so`js::RunScript(JSContext*, js::RunState&) + 254
frame #34: 0x000000080af9dbea libxul.so`js::InternalCallOrConstruct(JSContext*, JS::CallArgs const&, js::MaybeConstruct, js::CallReason) + 1898
frame #35: 0x000000080af9e10c libxul.so`js::Call(JSContext*, JS::Handle<JS::Value>, JS::Handle<JS::Value>, js::AnyInvokeArgs const&, JS::MutableHandle<JS::Value>, js::CallReason) + 44
frame #36: 0x000000080b153524 libxul.so`js::fun_call(JSContext*, unsigned int, JS::Value*) + 388
frame #37: 0x000000080b153887 libxul.so`js::fun_apply(JSContext*, unsigned int, JS::Value*) + 247
(lldb)
En fait,
un patch serait nécessaire à Firefox pour utiliser correctement l’API, mais, comme
ils sont bien gentils chez sqlite, ils rétropédalent.
Quote: It turns out that some important 3rd-party software does questionable
pointer manipulations on those filenames that depend on that legacy
layout. Technically, this is a misuse of SQLite by the 3rd-party
software, but we want to avoid unnecessary breakage
Je ne sais pas s’ils ont raison de laisser faire, finalement.