xref: /aosp_15_r20/external/sqlite/Android.patch (revision a3141fd39888aecc864dfb08485df64ff6c387f9)
1*a3141fd3SAndroid Build Coastguard Worker--- orig/shell.c	2023-06-13 13:30:22.470500137 -0700
2*a3141fd3SAndroid Build Coastguard Worker+++ shell.c	2023-06-13 13:30:22.546500365 -0700
3*a3141fd3SAndroid Build Coastguard Worker@@ -127,6 +127,11 @@
4*a3141fd3SAndroid Build Coastguard Worker #endif
5*a3141fd3SAndroid Build Coastguard Worker #include <ctype.h>
6*a3141fd3SAndroid Build Coastguard Worker #include <stdarg.h>
7*a3141fd3SAndroid Build Coastguard Worker+// Begin Android Add
8*a3141fd3SAndroid Build Coastguard Worker+#ifndef NO_ANDROID_FUNCS
9*a3141fd3SAndroid Build Coastguard Worker+#include <sqlite3_android.h>
10*a3141fd3SAndroid Build Coastguard Worker+#endif
11*a3141fd3SAndroid Build Coastguard Worker+// End Android Add
12*a3141fd3SAndroid Build Coastguard Worker
13*a3141fd3SAndroid Build Coastguard Worker #if !defined(_WIN32) && !defined(WIN32)
14*a3141fd3SAndroid Build Coastguard Worker # include <signal.h>
15*a3141fd3SAndroid Build Coastguard Worker@@ -246,7 +251,9 @@
16*a3141fd3SAndroid Build Coastguard Worker #if SQLITE_OS_WINRT
17*a3141fd3SAndroid Build Coastguard Worker #include <intrin.h>
18*a3141fd3SAndroid Build Coastguard Worker #endif
19*a3141fd3SAndroid Build Coastguard Worker+#ifndef WIN32_LEAN_AND_MEAN
20*a3141fd3SAndroid Build Coastguard Worker #define WIN32_LEAN_AND_MEAN
21*a3141fd3SAndroid Build Coastguard Worker+#endif
22*a3141fd3SAndroid Build Coastguard Worker #include <windows.h>
23*a3141fd3SAndroid Build Coastguard Worker
24*a3141fd3SAndroid Build Coastguard Worker /* string conversion routines only needed on Win32 */
25*a3141fd3SAndroid Build Coastguard Worker@@ -20793,6 +20800,21 @@
26*a3141fd3SAndroid Build Coastguard Worker                             editFunc, 0, 0);
27*a3141fd3SAndroid Build Coastguard Worker #endif
28*a3141fd3SAndroid Build Coastguard Worker
29*a3141fd3SAndroid Build Coastguard Worker+// Begin Android Add
30*a3141fd3SAndroid Build Coastguard Worker+#ifndef NO_ANDROID_FUNCS
31*a3141fd3SAndroid Build Coastguard Worker+    int err = register_localized_collators(p->db, "en_US", 0);
32*a3141fd3SAndroid Build Coastguard Worker+    if (err != SQLITE_OK) {
33*a3141fd3SAndroid Build Coastguard Worker+      fprintf(stderr, "register_localized_collators() failed\n");
34*a3141fd3SAndroid Build Coastguard Worker+      exit(1);
35*a3141fd3SAndroid Build Coastguard Worker+    }
36*a3141fd3SAndroid Build Coastguard Worker+    err = register_android_functions(p->db, 0);
37*a3141fd3SAndroid Build Coastguard Worker+    if (err != SQLITE_OK) {
38*a3141fd3SAndroid Build Coastguard Worker+      fprintf(stderr, "register_android_functions() failed\n");
39*a3141fd3SAndroid Build Coastguard Worker+      exit(1);
40*a3141fd3SAndroid Build Coastguard Worker+    }
41*a3141fd3SAndroid Build Coastguard Worker+#endif
42*a3141fd3SAndroid Build Coastguard Worker+// End Android Add
43*a3141fd3SAndroid Build Coastguard Worker+
44*a3141fd3SAndroid Build Coastguard Worker     if( p->openMode==SHELL_OPEN_ZIPFILE ){
45*a3141fd3SAndroid Build Coastguard Worker       char *zSql = sqlite3_mprintf(
46*a3141fd3SAndroid Build Coastguard Worker          "CREATE VIRTUAL TABLE zip USING zipfile(%Q);", zDbFilename);
47*a3141fd3SAndroid Build Coastguard Worker--- orig/sqlite3.c	2023-06-13 13:30:22.494500209 -0700
48*a3141fd3SAndroid Build Coastguard Worker+++ sqlite3.c	2023-06-13 13:30:22.590500496 -0700
49*a3141fd3SAndroid Build Coastguard Worker@@ -37314,6 +37314,10 @@
50*a3141fd3SAndroid Build Coastguard Worker # include <sys/mount.h>
51*a3141fd3SAndroid Build Coastguard Worker #endif
52*a3141fd3SAndroid Build Coastguard Worker
53*a3141fd3SAndroid Build Coastguard Worker+#if defined(__BIONIC__)
54*a3141fd3SAndroid Build Coastguard Worker+# include <android/fdsan.h>
55*a3141fd3SAndroid Build Coastguard Worker+#endif
56*a3141fd3SAndroid Build Coastguard Worker+
57*a3141fd3SAndroid Build Coastguard Worker #ifdef HAVE_UTIME
58*a3141fd3SAndroid Build Coastguard Worker # include <utime.h>
59*a3141fd3SAndroid Build Coastguard Worker #endif
60*a3141fd3SAndroid Build Coastguard Worker@@ -37922,6 +37926,12 @@
61*a3141fd3SAndroid Build Coastguard Worker #if defined(FD_CLOEXEC) && (!defined(O_CLOEXEC) || O_CLOEXEC==0)
62*a3141fd3SAndroid Build Coastguard Worker     osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
63*a3141fd3SAndroid Build Coastguard Worker #endif
64*a3141fd3SAndroid Build Coastguard Worker+
65*a3141fd3SAndroid Build Coastguard Worker+#if defined(__BIONIC__) && __ANDROID_API__ >= __ANDROID_API_Q__
66*a3141fd3SAndroid Build Coastguard Worker+    uint64_t tag = android_fdsan_create_owner_tag(
67*a3141fd3SAndroid Build Coastguard Worker+        ANDROID_FDSAN_OWNER_TYPE_SQLITE, fd);
68*a3141fd3SAndroid Build Coastguard Worker+    android_fdsan_exchange_owner_tag(fd, 0, tag);
69*a3141fd3SAndroid Build Coastguard Worker+#endif
70*a3141fd3SAndroid Build Coastguard Worker   }
71*a3141fd3SAndroid Build Coastguard Worker   return fd;
72*a3141fd3SAndroid Build Coastguard Worker }
73*a3141fd3SAndroid Build Coastguard Worker@@ -38502,7 +38512,13 @@
74*a3141fd3SAndroid Build Coastguard Worker ** and move on.
75*a3141fd3SAndroid Build Coastguard Worker */
76*a3141fd3SAndroid Build Coastguard Worker static void robust_close(unixFile *pFile, int h, int lineno){
77*a3141fd3SAndroid Build Coastguard Worker+#if defined(__BIONIC__) && __ANDROID_API__ >= __ANDROID_API_Q__
78*a3141fd3SAndroid Build Coastguard Worker+  uint64_t tag = android_fdsan_create_owner_tag(
79*a3141fd3SAndroid Build Coastguard Worker+      ANDROID_FDSAN_OWNER_TYPE_SQLITE, h);
80*a3141fd3SAndroid Build Coastguard Worker+  if( android_fdsan_close_with_tag(h, tag) ){
81*a3141fd3SAndroid Build Coastguard Worker+#else
82*a3141fd3SAndroid Build Coastguard Worker   if( osClose(h) ){
83*a3141fd3SAndroid Build Coastguard Worker+#endif
84*a3141fd3SAndroid Build Coastguard Worker     unixLogErrorAtLine(SQLITE_IOERR_CLOSE, "close",
85*a3141fd3SAndroid Build Coastguard Worker                        pFile ? pFile->zPath : 0, lineno);
86*a3141fd3SAndroid Build Coastguard Worker   }
87*a3141fd3SAndroid Build Coastguard Worker@@ -41051,7 +41067,7 @@
88*a3141fd3SAndroid Build Coastguard Worker   SimulateIOError( rc=1 );
89*a3141fd3SAndroid Build Coastguard Worker   if( rc!=0 ){
90*a3141fd3SAndroid Build Coastguard Worker     storeLastErrno((unixFile*)id, errno);
91*a3141fd3SAndroid Build Coastguard Worker-    return SQLITE_IOERR_FSTAT;
92*a3141fd3SAndroid Build Coastguard Worker+    return unixLogError(SQLITE_IOERR_FSTAT, "fstat", ((unixFile*)id)->zPath);
93*a3141fd3SAndroid Build Coastguard Worker   }
94*a3141fd3SAndroid Build Coastguard Worker   *pSize = buf.st_size;
95*a3141fd3SAndroid Build Coastguard Worker
96*a3141fd3SAndroid Build Coastguard Worker@@ -41087,7 +41103,7 @@
97*a3141fd3SAndroid Build Coastguard Worker     struct stat buf;              /* Used to hold return values of fstat() */
98*a3141fd3SAndroid Build Coastguard Worker
99*a3141fd3SAndroid Build Coastguard Worker     if( osFstat(pFile->h, &buf) ){
100*a3141fd3SAndroid Build Coastguard Worker-      return SQLITE_IOERR_FSTAT;
101*a3141fd3SAndroid Build Coastguard Worker+      return unixLogError(SQLITE_IOERR_FSTAT, "fstat", pFile->zPath);
102*a3141fd3SAndroid Build Coastguard Worker     }
103*a3141fd3SAndroid Build Coastguard Worker
104*a3141fd3SAndroid Build Coastguard Worker     nSize = ((nByte+pFile->szChunk-1) / pFile->szChunk) * pFile->szChunk;
105*a3141fd3SAndroid Build Coastguard Worker@@ -41829,7 +41845,7 @@
106*a3141fd3SAndroid Build Coastguard Worker     ** with the same permissions.
107*a3141fd3SAndroid Build Coastguard Worker     */
108*a3141fd3SAndroid Build Coastguard Worker     if( osFstat(pDbFd->h, &sStat) ){
109*a3141fd3SAndroid Build Coastguard Worker-      rc = SQLITE_IOERR_FSTAT;
110*a3141fd3SAndroid Build Coastguard Worker+      rc = unixLogError(SQLITE_IOERR_FSTAT, "fstat", pDbFd->zPath);
111*a3141fd3SAndroid Build Coastguard Worker       goto shm_open_err;
112*a3141fd3SAndroid Build Coastguard Worker     }
113*a3141fd3SAndroid Build Coastguard Worker
114*a3141fd3SAndroid Build Coastguard Worker@@ -138266,7 +138282,7 @@
115*a3141fd3SAndroid Build Coastguard Worker   }
116*a3141fd3SAndroid Build Coastguard Worker   if( pDb->pSchema->file_format>SQLITE_MAX_FILE_FORMAT ){
117*a3141fd3SAndroid Build Coastguard Worker     sqlite3SetString(pzErrMsg, db, "unsupported file format");
118*a3141fd3SAndroid Build Coastguard Worker-    rc = SQLITE_ERROR;
119*a3141fd3SAndroid Build Coastguard Worker+    rc = SQLITE_CORRUPT_BKPT; // Android Change from "rc = SQLITE_ERROR;";
120*a3141fd3SAndroid Build Coastguard Worker     goto initone_error_out;
121*a3141fd3SAndroid Build Coastguard Worker   }
122*a3141fd3SAndroid Build Coastguard Worker
123*a3141fd3SAndroid Build Coastguard Worker@@ -185208,7 +185224,9 @@
124*a3141fd3SAndroid Build Coastguard Worker   ** module with sqlite.
125*a3141fd3SAndroid Build Coastguard Worker   */
126*a3141fd3SAndroid Build Coastguard Worker   if( SQLITE_OK==rc
127*a3141fd3SAndroid Build Coastguard Worker+#ifndef ANDROID    /* fts3_tokenizer disabled for security reasons */
128*a3141fd3SAndroid Build Coastguard Worker    && SQLITE_OK==(rc=sqlite3Fts3InitHashTable(db,&pHash->hash,"fts3_tokenizer"))
129*a3141fd3SAndroid Build Coastguard Worker+#endif
130*a3141fd3SAndroid Build Coastguard Worker    && SQLITE_OK==(rc = sqlite3_overload_function(db, "snippet", -1))
131*a3141fd3SAndroid Build Coastguard Worker    && SQLITE_OK==(rc = sqlite3_overload_function(db, "offsets", 1))
132*a3141fd3SAndroid Build Coastguard Worker    && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 1))
133*a3141fd3SAndroid Build Coastguard Worker@@ -185219,6 +185237,20 @@
134*a3141fd3SAndroid Build Coastguard Worker     rc = sqlite3_create_module_v2(
135*a3141fd3SAndroid Build Coastguard Worker         db, "fts3", &fts3Module, (void *)pHash, hashDestroy
136*a3141fd3SAndroid Build Coastguard Worker     );
137*a3141fd3SAndroid Build Coastguard Worker+#ifdef SQLITE_ENABLE_FTS3_BACKWARDS
138*a3141fd3SAndroid Build Coastguard Worker+    if( rc==SQLITE_OK ){
139*a3141fd3SAndroid Build Coastguard Worker+      pHash->nRef++;
140*a3141fd3SAndroid Build Coastguard Worker+      rc = sqlite3_create_module_v2(
141*a3141fd3SAndroid Build Coastguard Worker+          db, "fts1", &fts3Module, (void *)pHash, hashDestroy
142*a3141fd3SAndroid Build Coastguard Worker+      );
143*a3141fd3SAndroid Build Coastguard Worker+    }
144*a3141fd3SAndroid Build Coastguard Worker+    if( rc==SQLITE_OK ){
145*a3141fd3SAndroid Build Coastguard Worker+      pHash->nRef++;
146*a3141fd3SAndroid Build Coastguard Worker+      rc = sqlite3_create_module_v2(
147*a3141fd3SAndroid Build Coastguard Worker+          db, "fts2", &fts3Module, (void *)pHash, hashDestroy
148*a3141fd3SAndroid Build Coastguard Worker+      );
149*a3141fd3SAndroid Build Coastguard Worker+    }
150*a3141fd3SAndroid Build Coastguard Worker+#endif
151*a3141fd3SAndroid Build Coastguard Worker     if( rc==SQLITE_OK ){
152*a3141fd3SAndroid Build Coastguard Worker       pHash->nRef++;
153*a3141fd3SAndroid Build Coastguard Worker       rc = sqlite3_create_module_v2(
154