Index: third_party/sqlite/patches/0010-Allow-read-only-memory-mapping.patch |
diff --git a/third_party/sqlite/patches/0010-Allow-read-only-memory-mapping.patch b/third_party/sqlite/patches/0010-Allow-read-only-memory-mapping.patch |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3653fb9540abf08a500606d729ebe54e63559d35 |
--- /dev/null |
+++ b/third_party/sqlite/patches/0010-Allow-read-only-memory-mapping.patch |
@@ -0,0 +1,47 @@ |
+From 12b0ba774b11ae27c41ad20e62522c00567e2a0a Mon Sep 17 00:00:00 2001 |
+From: Scott Hess <shess@chromium.org> |
+Date: Wed, 5 Aug 2015 16:44:32 -0700 |
+Subject: [PATCH 10/10] Allow read-only memory mapping. |
+ |
+In memory-mapped I/O mode, SQLite writes pages by using memcpy() from |
+the staging memory into the underlying memory-mapped file. This allows |
+anyone in the process to also write into that space. Modify SQLite to |
+map things read-only. |
+ |
+TODO: Upstream. |
+ |
+BUG=489784 |
+--- |
+ third_party/sqlite/src/src/os_unix.c | 2 +- |
+ third_party/sqlite/src/src/os_win.c | 2 +- |
+ 2 files changed, 2 insertions(+), 2 deletions(-) |
+ |
+diff --git a/third_party/sqlite/src/src/os_unix.c b/third_party/sqlite/src/src/os_unix.c |
+index fa85638..523cad6 100644 |
+--- a/third_party/sqlite/src/src/os_unix.c |
++++ b/third_party/sqlite/src/src/os_unix.c |
+@@ -3141,7 +3141,7 @@ static int unixRead( |
+ ); |
+ #endif |
+ |
+-#if SQLITE_MAX_MMAP_SIZE>0 |
++#if defined(SQLITE_MMAP_READWRITE) && SQLITE_MAX_MMAP_SIZE>0 |
+ /* Deal with as much of this read request as possible by transfering |
+ ** data from the memory mapping using memcpy(). */ |
+ if( offset<pFile->mmapSize ){ |
+diff --git a/third_party/sqlite/src/src/os_win.c b/third_party/sqlite/src/src/os_win.c |
+index 00ad6fd..8a68828 100644 |
+--- a/third_party/sqlite/src/src/os_win.c |
++++ b/third_party/sqlite/src/src/os_win.c |
+@@ -2524,7 +2524,7 @@ static int winRead( |
+ "offset=%lld, lock=%d\n", osGetCurrentProcessId(), pFile, |
+ pFile->h, pBuf, amt, offset, pFile->locktype)); |
+ |
+-#if SQLITE_MAX_MMAP_SIZE>0 |
++#if defined(SQLITE_MMAP_READWRITE) && SQLITE_MAX_MMAP_SIZE>0 |
+ /* Deal with as much of this read request as possible by transfering |
+ ** data from the memory mapping using memcpy(). */ |
+ if( offset<pFile->mmapSize ){ |
+-- |
+2.7.0 |
+ |