Roll src/third_party/WebKit a3b4a2e:7441784 (svn 202551:202552)
[chromium-blink-merge.git] / third_party / sqlite / patches / 0012-Allow-read-only-memory-mapping.patch
blobacb20c9e51e4c9c2d9801557c95e07c696702f58
1 From 0b346776e7a4d775932a18970801fa48d7a5ce11 Mon Sep 17 00:00:00 2001
2 From: Scott Hess <shess@chromium.org>
3 Date: Wed, 5 Aug 2015 16:44:32 -0700
4 Subject: [PATCH 12/12] Allow read-only memory mapping.
6 In memory-mapped I/O mode, SQLite writes pages by using memcpy() from
7 the staging memory into the underlying memory-mapped file. This allows
8 anyone in the process to also write into that space. Modify SQLite to
9 map things read-only.
11 TODO: Upstream.
13 BUG=489784
14 ---
15 third_party/sqlite/src/src/os_unix.c | 4 ++++
16 third_party/sqlite/src/src/os_win.c | 4 ++++
17 2 files changed, 8 insertions(+)
19 diff --git a/third_party/sqlite/src/src/os_unix.c b/third_party/sqlite/src/src/os_unix.c
20 index 75b71dc..eaa97cf 100644
21 --- a/third_party/sqlite/src/src/os_unix.c
22 +++ b/third_party/sqlite/src/src/os_unix.c
23 @@ -3341,6 +3341,7 @@ static int unixWrite(
25 #endif
27 +#if !SQLITE_MMAP_READ_ONLY
28 #if SQLITE_MAX_MMAP_SIZE>0
29 /* Deal with as much of this write request as possible by transfering
30 ** data from the memory mapping using memcpy(). */
31 @@ -3357,6 +3358,7 @@ static int unixWrite(
34 #endif
35 +#endif
37 while( amt>0 && (wrote = seekAndWrite(pFile, offset, pBuf, amt))>0 ){
38 amt -= wrote;
39 @@ -4743,7 +4745,9 @@ static void unixRemapfile(
40 assert( pFd->mmapSizeActual>=pFd->mmapSize );
41 assert( MAP_FAILED!=0 );
43 +#if !SQLITE_MMAP_READ_ONLY
44 if( (pFd->ctrlFlags & UNIXFILE_RDONLY)==0 ) flags |= PROT_WRITE;
45 +#endif
47 if( pOrig ){
48 #if HAVE_MREMAP
49 diff --git a/third_party/sqlite/src/src/os_win.c b/third_party/sqlite/src/src/os_win.c
50 index 9320bfc..2e757f8 100644
51 --- a/third_party/sqlite/src/src/os_win.c
52 +++ b/third_party/sqlite/src/src/os_win.c
53 @@ -2558,6 +2558,7 @@ static int winWrite(
54 OSTRACE(("WRITE file=%p, buffer=%p, amount=%d, offset=%lld, lock=%d\n",
55 pFile->h, pBuf, amt, offset, pFile->locktype));
57 +#if !SQLITE_MMAP_READ_ONLY
58 #if SQLITE_MAX_MMAP_SIZE>0
59 /* Deal with as much of this write request as possible by transfering
60 ** data from the memory mapping using memcpy(). */
61 @@ -2575,6 +2576,7 @@ static int winWrite(
64 #endif
65 +#endif
67 #if SQLITE_OS_WINCE
68 rc = winSeekFile(pFile, offset);
69 @@ -4021,10 +4023,12 @@ static int winMapfile(winFile *pFd, sqlite3_int64 nByte){
70 DWORD flags = FILE_MAP_READ;
72 winUnmapfile(pFd);
73 +#if !SQLITE_MMAP_READ_ONLY
74 if( (pFd->ctrlFlags & WINFILE_RDONLY)==0 ){
75 protect = PAGE_READWRITE;
76 flags |= FILE_MAP_WRITE;
78 +#endif
79 #if SQLITE_OS_WINRT
80 pFd->hMap = osCreateFileMappingFromApp(pFd->h, NULL, protect, nMap, NULL);
81 #elif defined(SQLITE_WIN32_HAS_WIDE)
82 --
83 2.4.5