summaryrefslogtreecommitdiffstats
path: root/libraries/qt5-legacy/patches/explicitly-initialize-sqlite.patch
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/qt5-legacy/patches/explicitly-initialize-sqlite.patch')
-rw-r--r--libraries/qt5-legacy/patches/explicitly-initialize-sqlite.patch217
1 files changed, 217 insertions, 0 deletions
diff --git a/libraries/qt5-legacy/patches/explicitly-initialize-sqlite.patch b/libraries/qt5-legacy/patches/explicitly-initialize-sqlite.patch
new file mode 100644
index 0000000000..2773658adc
--- /dev/null
+++ b/libraries/qt5-legacy/patches/explicitly-initialize-sqlite.patch
@@ -0,0 +1,217 @@
+From 9bab2acc924790b0a01a08e76f9216acc2d6528b Mon Sep 17 00:00:00 2001
+From: Allan Sandfeld Jensen <allan.jensen@qt.io>
+Date: Thu, 16 May 2019 11:19:49 +0200
+Subject: [Backport] WebSQL: Explicitly initialize SQLite, remove deprecated
+ API usage.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Change-Id: I291dd041c5646c4fdd714ff98dd939566861d921
+Reviewed-on: https://chromium-review.googlesource.com/892092
+Task-number: QTBUG-75853
+Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
+---
+ .../Source/modules/webdatabase/DatabaseTracker.cpp | 2 +-
+ .../modules/webdatabase/sqlite/SQLiteFileSystem.cpp | 21 ++++++++++++++++++++-
+ .../modules/webdatabase/sqlite/SQLiteFileSystem.h | 21 +++++++++++++++------
+ .../webdatabase/sqlite/SQLiteFileSystemPosix.cpp | 19 ++++++++++---------
+ .../webdatabase/sqlite/SQLiteFileSystemWin.cpp | 19 ++++++++++---------
+ 5 files changed, 56 insertions(+), 26 deletions(-)
+
+diff --git a/chromium/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp b/chromium/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp
+index 13ea7d8181..f78d90a5df 100644
+--- a/chromium/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp
++++ b/chromium/third_party/WebKit/Source/modules/webdatabase/DatabaseTracker.cpp
+@@ -66,7 +66,7 @@ DatabaseTracker& DatabaseTracker::tracker() {
+ }
+
+ DatabaseTracker::DatabaseTracker() {
+- SQLiteFileSystem::registerSQLiteVFS();
++ SQLiteFileSystem::initializeSQLite();
+ }
+
+ bool DatabaseTracker::canEstablishDatabase(DatabaseContext* databaseContext,
+diff --git a/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.cpp b/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.cpp
+index 9c25341c57..2a6e140f9e 100644
+--- a/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.cpp
++++ b/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.cpp
+@@ -39,9 +39,28 @@
+ // platform-specific files SQLiteFileSystemChromium{Win|Posix}.cpp
+ namespace blink {
+
+-SQLiteFileSystem::SQLiteFileSystem() {}
++#if DCHECK_IS_ON()
++// static
++bool SQLiteFileSystem::initialize_sqlite_called_ = false;
++#endif // DCHECK_IS_ON
+
++// static
++void SQLiteFileSystem::initializeSQLite() {
++#if DCHECK_IS_ON()
++ DCHECK(!initialize_sqlite_called_) << __func__ << " already called";
++ initialize_sqlite_called_ = true;
++#endif // DCHECK_IS_ON()
++
++ sqlite3_initialize();
++ registerSQLiteVFS();
++}
++
++// static
+ int SQLiteFileSystem::openDatabase(const String& filename, sqlite3** database) {
++#if DCHECK_IS_ON()
++ DCHECK(initialize_sqlite_called_)
++ << "InitializeSQLite() must be called before " << __func__;
++#endif // DCHECK_IS_ON()
+ SafePointScope scope(BlinkGC::HeapPointersOnStack);
+ return sqlite3_open_v2(filename.utf8().data(), database,
+ SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,
+diff --git a/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.h b/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.h
+index 97c0ad83a1..af2bcd9211 100644
+--- a/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.h
++++ b/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystem.h
+@@ -42,22 +42,31 @@ namespace blink {
+ // A class that abstracts the file system related operations required
+ // by the WebKit database code.
+ class SQLiteFileSystem {
+- DISALLOW_NEW();
+-
+ public:
+- // Registers a user-defined SQLite VFS.
+- static void registerSQLiteVFS();
++ // This class is used as a namespace, so instantiating it doesn't make sense.
++ SQLiteFileSystem() = delete;
++
++ // Initializes SQLite for Blink's use.
++ //
++ // This must be called exactly once in each renderer process that uses SQLite.
++ static void initializeSQLite();
+
+ // Opens a database file.
+ //
++ // initializeSQLite() must be called before this method is called.
++ //
+ // filemame - The name of the database file.
+ // database - The SQLite structure that represents the database stored
+ // in the given file.
+ static int openDatabase(const String& filename, sqlite3** database);
+
+ private:
+- // do not instantiate this class
+- SQLiteFileSystem();
++ // Registers Chromium's VFS with SQLite.
++ static void registerSQLiteVFS();
++
++#if DCHECK_IS_ON()
++ static bool initialize_sqlite_called_;
++#endif // DCHECK_IS_ON()
+ }; // class SQLiteFileSystem
+
+ } // namespace blink
+diff --git a/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystemPosix.cpp b/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystemPosix.cpp
+index 77e7b6d904..20d0fd2e0e 100644
+--- a/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystemPosix.cpp
++++ b/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystemPosix.cpp
+@@ -321,11 +321,6 @@ int chromiumSleep(sqlite3_vfs* vfs, int microseconds) {
+ return wrappedVfs->xSleep(wrappedVfs, microseconds);
+ }
+
+-int chromiumCurrentTime(sqlite3_vfs* vfs, double* prNow) {
+- sqlite3_vfs* wrappedVfs = static_cast<sqlite3_vfs*>(vfs->pAppData);
+- return wrappedVfs->xCurrentTime(wrappedVfs, prNow);
+-}
+-
+ int chromiumGetLastError(sqlite3_vfs* vfs, int e, char* s) {
+ // xGetLastError() has never been used by SQLite. The implementation in
+ // os_win.c indicates this is a reasonable implementation.
+@@ -333,6 +328,11 @@ int chromiumGetLastError(sqlite3_vfs* vfs, int e, char* s) {
+ return 0;
+ }
+
++int chromiumCurrentTimeInt64(sqlite3_vfs* vfs, sqlite3_int64* now) {
++ sqlite3_vfs* wrapped_vfs = static_cast<sqlite3_vfs*>(vfs->pAppData);
++ return wrapped_vfs->xCurrentTimeInt64(wrapped_vfs, now);
++}
++
+ } // namespace
+
+ void SQLiteFileSystem::registerSQLiteVFS() {
+@@ -342,9 +342,9 @@ void SQLiteFileSystem::registerSQLiteVFS() {
+ // TODO(shess): Implement local versions.
+ ASSERT(wrappedVfs->xRandomness);
+ ASSERT(wrappedVfs->xSleep);
+- ASSERT(wrappedVfs->xCurrentTime);
++ ASSERT(wrappedVfs->xCurrentTimeInt64);
+
+- static sqlite3_vfs chromium_vfs = {1,
++ static sqlite3_vfs chromium_vfs = {2,
+ sizeof(chromiumVfsFile),
+ wrappedVfs->mxPathname,
+ 0,
+@@ -360,8 +360,9 @@ void SQLiteFileSystem::registerSQLiteVFS() {
+ chromiumDlClose,
+ chromiumRandomness,
+ chromiumSleep,
+- chromiumCurrentTime,
+- chromiumGetLastError};
++ nullptr, // CurrentTime is deprecated.
++ chromiumGetLastError,
++ chromiumCurrentTimeInt64};
+ sqlite3_vfs_register(&chromium_vfs, 0);
+ }
+
+diff --git a/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystemWin.cpp b/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystemWin.cpp
+index 2933df65f6..31103047fd 100644
+--- a/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystemWin.cpp
++++ b/chromium/third_party/WebKit/Source/modules/webdatabase/sqlite/SQLiteFileSystemWin.cpp
+@@ -148,11 +148,6 @@ int chromiumSleep(sqlite3_vfs* vfs, int microseconds) {
+ return wrappedVfs->xSleep(wrappedVfs, microseconds);
+ }
+
+-int chromiumCurrentTime(sqlite3_vfs* vfs, double* prNow) {
+- sqlite3_vfs* wrappedVfs = static_cast<sqlite3_vfs*>(vfs->pAppData);
+- return wrappedVfs->xCurrentTime(wrappedVfs, prNow);
+-}
+-
+ int chromiumGetLastError(sqlite3_vfs* vfs, int e, char* s) {
+ // xGetLastError() has never been used by SQLite. The implementation in
+ // os_win.c indicates this is a reasonable implementation.
+@@ -160,6 +155,11 @@ int chromiumGetLastError(sqlite3_vfs* vfs, int e, char* s) {
+ return 0;
+ }
+
++int chromiumCurrentTimeInt64(sqlite3_vfs* vfs, sqlite3_int64* now) {
++ sqlite3_vfs* wrapped_vfs = static_cast<sqlite3_vfs*>(vfs->pAppData);
++ return wrapped_vfs->xCurrentTimeInt64(wrapped_vfs, now);
++}
++
+ } // namespace
+
+ void SQLiteFileSystem::registerSQLiteVFS() {
+@@ -169,9 +169,9 @@ void SQLiteFileSystem::registerSQLiteVFS() {
+ // TODO(shess): Implement local versions.
+ ASSERT(wrappedVfs->xRandomness);
+ ASSERT(wrappedVfs->xSleep);
+- ASSERT(wrappedVfs->xCurrentTime);
++ ASSERT(wrappedVfs->xCurrentTimeInt64);
+
+- static sqlite3_vfs chromium_vfs = {1,
++ static sqlite3_vfs chromium_vfs = {2,
+ wrappedVfs->szOsFile,
+ wrappedVfs->mxPathname,
+ 0,
+@@ -187,8 +187,9 @@ void SQLiteFileSystem::registerSQLiteVFS() {
+ chromiumDlClose,
+ chromiumRandomness,
+ chromiumSleep,
+- chromiumCurrentTime,
+- chromiumGetLastError};
++ nullptr, // CurrentTime is deprecated.
++ chromiumGetLastError,
++ chromiumCurrentTimeInt64};
+ sqlite3_vfs_register(&chromium_vfs, 0);
+ }
+
+--
+cgit v1.2.1
+