|
Milan Crha |
4edd00 |
From 01cd4a6e7ab0ac5b92066e2fe2e9cc0e2ffd35c4 Mon Sep 17 00:00:00 2001
|
|
Milan Crha |
4edd00 |
From: Milan Crha <mcrha@redhat.com>
|
|
Milan Crha |
4edd00 |
Date: Thu, 23 Oct 2014 11:58:43 +0200
|
|
Milan Crha |
4edd00 |
Subject: Bug 738965 - [SQLite VFS] Crash due to missing xFetch definition
|
|
Milan Crha |
4edd00 |
|
|
Milan Crha |
4edd00 |
|
|
Milan Crha |
4edd00 |
diff --git a/camel/camel-db.c b/camel/camel-db.c
|
|
Milan Crha |
4edd00 |
index a93da08..e14f0ef 100644
|
|
Milan Crha |
4edd00 |
--- a/camel/camel-db.c
|
|
Milan Crha |
4edd00 |
+++ b/camel/camel-db.c
|
|
Milan Crha |
4edd00 |
@@ -186,6 +186,20 @@ camel_sqlite3_file_ ## _nm _params \
|
|
Milan Crha |
4edd00 |
return cFile->old_vfs_file->pMethods->_nm _call; \
|
|
Milan Crha |
4edd00 |
}
|
|
Milan Crha |
4edd00 |
|
|
Milan Crha |
4edd00 |
+#define def_subclassed_void(_nm, _params, _call) \
|
|
Milan Crha |
4edd00 |
+static void \
|
|
Milan Crha |
4edd00 |
+camel_sqlite3_file_ ## _nm _params \
|
|
Milan Crha |
4edd00 |
+{ \
|
|
Milan Crha |
4edd00 |
+ CamelSqlite3File *cFile; \
|
|
Milan Crha |
4edd00 |
+ \
|
|
Milan Crha |
4edd00 |
+ g_return_if_fail (old_vfs != NULL); \
|
|
Milan Crha |
4edd00 |
+ g_return_if_fail (pFile != NULL); \
|
|
Milan Crha |
4edd00 |
+ \
|
|
Milan Crha |
4edd00 |
+ cFile = (CamelSqlite3File *) pFile; \
|
|
Milan Crha |
4edd00 |
+ g_return_if_fail (cFile->old_vfs_file->pMethods != NULL); \
|
|
Milan Crha |
4edd00 |
+ cFile->old_vfs_file->pMethods->_nm _call; \
|
|
Milan Crha |
4edd00 |
+}
|
|
Milan Crha |
4edd00 |
+
|
|
Milan Crha |
4edd00 |
def_subclassed (xRead, (sqlite3_file *pFile, gpointer pBuf, gint iAmt, sqlite3_int64 iOfst), (cFile->old_vfs_file, pBuf, iAmt, iOfst))
|
|
Milan Crha |
4edd00 |
def_subclassed (xWrite, (sqlite3_file *pFile, gconstpointer pBuf, gint iAmt, sqlite3_int64 iOfst), (cFile->old_vfs_file, pBuf, iAmt, iOfst))
|
|
Milan Crha |
4edd00 |
def_subclassed (xTruncate, (sqlite3_file *pFile, sqlite3_int64 size), (cFile->old_vfs_file, size))
|
|
Milan Crha |
4edd00 |
@@ -195,6 +209,12 @@ def_subclassed (xUnlock, (sqlite3_file *pFile, gint lockType), (cFile->old_vfs_f
|
|
Milan Crha |
4edd00 |
def_subclassed (xFileControl, (sqlite3_file *pFile, gint op, gpointer pArg), (cFile->old_vfs_file, op, pArg))
|
|
Milan Crha |
4edd00 |
def_subclassed (xSectorSize, (sqlite3_file *pFile), (cFile->old_vfs_file))
|
|
Milan Crha |
4edd00 |
def_subclassed (xDeviceCharacteristics, (sqlite3_file *pFile), (cFile->old_vfs_file))
|
|
Milan Crha |
4edd00 |
+def_subclassed (xShmMap, (sqlite3_file *pFile, gint iPg, gint pgsz, gint n, void volatile **arr), (cFile->old_vfs_file, iPg, pgsz, n, arr))
|
|
Milan Crha |
4edd00 |
+def_subclassed (xShmLock, (sqlite3_file *pFile, gint offset, gint n, gint flags), (cFile->old_vfs_file, offset, n, flags))
|
|
Milan Crha |
4edd00 |
+def_subclassed_void (xShmBarrier, (sqlite3_file *pFile), (cFile->old_vfs_file))
|
|
Milan Crha |
4edd00 |
+def_subclassed (xShmUnmap, (sqlite3_file *pFile, gint deleteFlag), (cFile->old_vfs_file, deleteFlag))
|
|
Milan Crha |
4edd00 |
+def_subclassed (xFetch, (sqlite3_file *pFile, sqlite3_int64 iOfst, int iAmt, void **pp), (cFile->old_vfs_file, iOfst, iAmt, pp))
|
|
Milan Crha |
4edd00 |
+def_subclassed (xUnfetch, (sqlite3_file *pFile, sqlite3_int64 iOfst, void *p), (cFile->old_vfs_file, iOfst, p))
|
|
Milan Crha |
4edd00 |
|
|
Milan Crha |
4edd00 |
#undef def_subclassed
|
|
Milan Crha |
4edd00 |
|
|
Milan Crha |
4edd00 |
@@ -343,6 +363,23 @@ camel_sqlite3_vfs_xOpen (sqlite3_vfs *pVfs,
|
|
Milan Crha |
4edd00 |
use_subclassed (xFileControl);
|
|
Milan Crha |
4edd00 |
use_subclassed (xSectorSize);
|
|
Milan Crha |
4edd00 |
use_subclassed (xDeviceCharacteristics);
|
|
Milan Crha |
4edd00 |
+
|
|
Milan Crha |
4edd00 |
+ if (io_methods.iVersion > 1) {
|
|
Milan Crha |
4edd00 |
+ use_subclassed (xShmMap);
|
|
Milan Crha |
4edd00 |
+ use_subclassed (xShmLock);
|
|
Milan Crha |
4edd00 |
+ use_subclassed (xShmBarrier);
|
|
Milan Crha |
4edd00 |
+ use_subclassed (xShmUnmap);
|
|
Milan Crha |
4edd00 |
+ }
|
|
Milan Crha |
4edd00 |
+
|
|
Milan Crha |
4edd00 |
+ if (io_methods.iVersion > 2) {
|
|
Milan Crha |
4edd00 |
+ use_subclassed (xFetch);
|
|
Milan Crha |
4edd00 |
+ use_subclassed (xUnfetch);
|
|
Milan Crha |
4edd00 |
+ }
|
|
Milan Crha |
4edd00 |
+
|
|
Milan Crha |
4edd00 |
+ if (io_methods.iVersion > 3) {
|
|
Milan Crha |
4edd00 |
+ g_warning ("%s: Unchecked IOMethods version %d, downgrading to version 3", G_STRFUNC, io_methods.iVersion);
|
|
Milan Crha |
4edd00 |
+ io_methods.iVersion = 3;
|
|
Milan Crha |
4edd00 |
+ }
|
|
Milan Crha |
4edd00 |
#undef use_subclassed
|
|
Milan Crha |
4edd00 |
}
|
|
Milan Crha |
4edd00 |
|
|
Milan Crha |
4edd00 |
diff --git a/libebackend/e-sqlite3-vfs.c b/libebackend/e-sqlite3-vfs.c
|
|
Milan Crha |
4edd00 |
index 495452a..bc1182d 100644
|
|
Milan Crha |
4edd00 |
--- a/libebackend/e-sqlite3-vfs.c
|
|
Milan Crha |
4edd00 |
+++ b/libebackend/e-sqlite3-vfs.c
|
|
Milan Crha |
4edd00 |
@@ -152,6 +152,19 @@ e_sqlite3_file_ ## _nm _params \
|
|
Milan Crha |
4edd00 |
g_return_val_if_fail (cFile->old_vfs_file->pMethods != NULL, SQLITE_ERROR); \
|
|
Milan Crha |
4edd00 |
return cFile->old_vfs_file->pMethods->_nm _call; \
|
|
Milan Crha |
4edd00 |
}
|
|
Milan Crha |
4edd00 |
+#define def_subclassed_void(_nm, _params, _call) \
|
|
Milan Crha |
4edd00 |
+static void \
|
|
Milan Crha |
4edd00 |
+e_sqlite3_file_ ## _nm _params \
|
|
Milan Crha |
4edd00 |
+{ \
|
|
Milan Crha |
4edd00 |
+ ESqlite3File *cFile; \
|
|
Milan Crha |
4edd00 |
+ \
|
|
Milan Crha |
4edd00 |
+ g_return_if_fail (old_vfs != NULL); \
|
|
Milan Crha |
4edd00 |
+ g_return_if_fail (pFile != NULL); \
|
|
Milan Crha |
4edd00 |
+ \
|
|
Milan Crha |
4edd00 |
+ cFile = (ESqlite3File *) pFile; \
|
|
Milan Crha |
4edd00 |
+ g_return_if_fail (cFile->old_vfs_file->pMethods != NULL); \
|
|
Milan Crha |
4edd00 |
+ cFile->old_vfs_file->pMethods->_nm _call; \
|
|
Milan Crha |
4edd00 |
+}
|
|
Milan Crha |
4edd00 |
|
|
Milan Crha |
4edd00 |
def_subclassed (xRead, (sqlite3_file *pFile, gpointer pBuf, gint iAmt, sqlite3_int64 iOfst), (cFile->old_vfs_file, pBuf, iAmt, iOfst))
|
|
Milan Crha |
4edd00 |
def_subclassed (xWrite, (sqlite3_file *pFile, gconstpointer pBuf, gint iAmt, sqlite3_int64 iOfst), (cFile->old_vfs_file, pBuf, iAmt, iOfst))
|
|
Milan Crha |
4edd00 |
@@ -162,6 +175,12 @@ def_subclassed (xUnlock, (sqlite3_file *pFile, gint lockType), (cFile->old_vfs_f
|
|
Milan Crha |
4edd00 |
def_subclassed (xFileControl, (sqlite3_file *pFile, gint op, gpointer pArg), (cFile->old_vfs_file, op, pArg))
|
|
Milan Crha |
4edd00 |
def_subclassed (xSectorSize, (sqlite3_file *pFile), (cFile->old_vfs_file))
|
|
Milan Crha |
4edd00 |
def_subclassed (xDeviceCharacteristics, (sqlite3_file *pFile), (cFile->old_vfs_file))
|
|
Milan Crha |
4edd00 |
+def_subclassed (xShmMap, (sqlite3_file *pFile, gint iPg, gint pgsz, gint n, void volatile **arr), (cFile->old_vfs_file, iPg, pgsz, n, arr))
|
|
Milan Crha |
4edd00 |
+def_subclassed (xShmLock, (sqlite3_file *pFile, gint offset, gint n, gint flags), (cFile->old_vfs_file, offset, n, flags))
|
|
Milan Crha |
4edd00 |
+def_subclassed_void (xShmBarrier, (sqlite3_file *pFile), (cFile->old_vfs_file))
|
|
Milan Crha |
4edd00 |
+def_subclassed (xShmUnmap, (sqlite3_file *pFile, gint deleteFlag), (cFile->old_vfs_file, deleteFlag))
|
|
Milan Crha |
4edd00 |
+def_subclassed (xFetch, (sqlite3_file *pFile, sqlite3_int64 iOfst, gint iAmt, void **pp), (cFile->old_vfs_file, iOfst, iAmt, pp))
|
|
Milan Crha |
4edd00 |
+def_subclassed (xUnfetch, (sqlite3_file *pFile, sqlite3_int64 iOfst, void *p), (cFile->old_vfs_file, iOfst, p))
|
|
Milan Crha |
4edd00 |
|
|
Milan Crha |
4edd00 |
#undef def_subclassed
|
|
Milan Crha |
4edd00 |
|
|
Milan Crha |
4edd00 |
@@ -306,6 +325,24 @@ e_sqlite3_vfs_xOpen (sqlite3_vfs *pVfs,
|
|
Milan Crha |
4edd00 |
use_subclassed (xFileControl);
|
|
Milan Crha |
4edd00 |
use_subclassed (xSectorSize);
|
|
Milan Crha |
4edd00 |
use_subclassed (xDeviceCharacteristics);
|
|
Milan Crha |
4edd00 |
+
|
|
Milan Crha |
4edd00 |
+ if (io_methods.iVersion > 1) {
|
|
Milan Crha |
4edd00 |
+ use_subclassed (xShmMap);
|
|
Milan Crha |
4edd00 |
+ use_subclassed (xShmLock);
|
|
Milan Crha |
4edd00 |
+ use_subclassed (xShmBarrier);
|
|
Milan Crha |
4edd00 |
+ use_subclassed (xShmUnmap);
|
|
Milan Crha |
4edd00 |
+ }
|
|
Milan Crha |
4edd00 |
+
|
|
Milan Crha |
4edd00 |
+ if (io_methods.iVersion > 2) {
|
|
Milan Crha |
4edd00 |
+ use_subclassed (xFetch);
|
|
Milan Crha |
4edd00 |
+ use_subclassed (xUnfetch);
|
|
Milan Crha |
4edd00 |
+ }
|
|
Milan Crha |
4edd00 |
+
|
|
Milan Crha |
4edd00 |
+ if (io_methods.iVersion > 3) {
|
|
Milan Crha |
4edd00 |
+ g_warning ("%s: Unchecked IOMethods version %d, downgrading to version 3", G_STRFUNC, io_methods.iVersion);
|
|
Milan Crha |
4edd00 |
+ io_methods.iVersion = 3;
|
|
Milan Crha |
4edd00 |
+ }
|
|
Milan Crha |
4edd00 |
+
|
|
Milan Crha |
4edd00 |
#undef use_subclassed
|
|
Milan Crha |
4edd00 |
}
|
|
Milan Crha |
4edd00 |
|
|
Milan Crha |
4edd00 |
--
|
|
Milan Crha |
4edd00 |
cgit v0.10.1
|
|
Milan Crha |
4edd00 |
|