blob: 458b38d7b43d89873be14bfea108e0a0a7533a39 [file] [log] [blame]
Zim84500122021-07-12 20:57:49 +01001--- orig/shell.c 2021-07-12 20:54:40.989319871 +0100
2+++ shell.c 2021-07-12 20:54:51.609392247 +0100
Victor Chang6a1491e2020-10-06 12:31:32 +01003@@ -95,6 +95,11 @@
Nick Kralevich3fcd43a2015-04-08 13:13:26 -07004 #endif
Jeff Brown0bc48362012-04-19 19:17:00 -07005 #include <ctype.h>
6 #include <stdarg.h>
7+// Begin Android Add
8+#ifndef NO_ANDROID_FUNCS
9+#include <sqlite3_android.h>
10+#endif
11+// End Android Add
12
Nick Kralevich8fecf562014-05-29 16:56:33 -070013 #if !defined(_WIN32) && !defined(WIN32)
Jeff Brown0bc48362012-04-19 19:17:00 -070014 # include <signal.h>
Victor Chang6a1491e2020-10-06 12:31:32 +010015@@ -12957,6 +12962,22 @@
Fyodor Kupolov0181ec22018-02-13 16:45:16 -080016 sqlite3_create_function(p->db, "edit", 2, SQLITE_UTF8, 0,
17 editFunc, 0, 0);
Haibo Huang880009b2019-06-11 14:59:02 -070018 #endif
Jeff Brown9bee60b2014-08-20 16:41:25 -070019+
Haibo Huang880009b2019-06-11 14:59:02 -070020+// Begin Android Add
21+#ifndef NO_ANDROID_FUNCS
Haibo Huang880009b2019-06-11 14:59:02 -070022+ int err = register_localized_collators(p->db, "en_US", 0);
23+ if (err != SQLITE_OK) {
24+ fprintf(stderr, "register_localized_collators() failed\n");
25+ exit(1);
26+ }
27+ err = register_android_functions(p->db, 0);
28+ if (err != SQLITE_OK) {
29+ fprintf(stderr, "register_android_functions() failed\n");
30+ exit(1);
31+ }
32+#endif
33+// End Android Add
Fyodor Kupolov0181ec22018-02-13 16:45:16 -080034+
35 if( p->openMode==SHELL_OPEN_ZIPFILE ){
36 char *zSql = sqlite3_mprintf(
37 "CREATE VIRTUAL TABLE zip USING zipfile(%Q);", p->zDbFilename);
Zim84500122021-07-12 20:57:49 +010038--- orig/sqlite3.c 2021-07-12 20:54:40.969319735 +0100
39+++ sqlite3.c 2021-07-12 20:54:51.609392247 +0100
40@@ -33407,6 +33407,10 @@
Josh Gaoc4277842018-08-21 18:44:26 -070041 # include <sys/mount.h>
42 #endif
43
44+#if defined(__BIONIC__)
45+# include <android/fdsan.h>
46+#endif
47+
48 #ifdef HAVE_UTIME
49 # include <utime.h>
50 #endif
Zim84500122021-07-12 20:57:49 +010051@@ -34167,6 +34171,12 @@
Josh Gaoc4277842018-08-21 18:44:26 -070052 #if defined(FD_CLOEXEC) && (!defined(O_CLOEXEC) || O_CLOEXEC==0)
53 osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
54 #endif
55+
56+#if defined(__BIONIC__) && __ANDROID_API__ >= __ANDROID_API_Q__
57+ uint64_t tag = android_fdsan_create_owner_tag(
58+ ANDROID_FDSAN_OWNER_TYPE_SQLITE, fd);
59+ android_fdsan_exchange_owner_tag(fd, 0, tag);
60+#endif
61 }
62 return fd;
63 }
Zim84500122021-07-12 20:57:49 +010064@@ -34747,7 +34757,13 @@
Josh Gaoc4277842018-08-21 18:44:26 -070065 ** and move on.
66 */
67 static void robust_close(unixFile *pFile, int h, int lineno){
68+#if defined(__BIONIC__) && __ANDROID_API__ >= __ANDROID_API_Q__
69+ uint64_t tag = android_fdsan_create_owner_tag(
70+ ANDROID_FDSAN_OWNER_TYPE_SQLITE, h);
71+ if( android_fdsan_close_with_tag(h, tag) ){
72+#else
73 if( osClose(h) ){
74+#endif
75 unixLogErrorAtLine(SQLITE_IOERR_CLOSE, "close",
76 pFile ? pFile->zPath : 0, lineno);
77 }
Zim84500122021-07-12 20:57:49 +010078@@ -37281,7 +37297,7 @@
Nick Kralevich34084e22014-02-28 10:29:21 -080079 SimulateIOError( rc=1 );
80 if( rc!=0 ){
Nick Kralevich3fcd43a2015-04-08 13:13:26 -070081 storeLastErrno((unixFile*)id, errno);
Nick Kralevich34084e22014-02-28 10:29:21 -080082- return SQLITE_IOERR_FSTAT;
83+ return unixLogError(SQLITE_IOERR_FSTAT, "fstat", ((unixFile*)id)->zPath);
84 }
85 *pSize = buf.st_size;
86
Zim84500122021-07-12 20:57:49 +010087@@ -37317,7 +37333,7 @@
Nick Kralevich34084e22014-02-28 10:29:21 -080088 struct stat buf; /* Used to hold return values of fstat() */
89
Nick Kralevich3fcd43a2015-04-08 13:13:26 -070090 if( osFstat(pFile->h, &buf) ){
91- return SQLITE_IOERR_FSTAT;
Nick Kralevich34084e22014-02-28 10:29:21 -080092+ return unixLogError(SQLITE_IOERR_FSTAT, "fstat", pFile->zPath);
Nick Kralevich3fcd43a2015-04-08 13:13:26 -070093 }
Nick Kralevich34084e22014-02-28 10:29:21 -080094
95 nSize = ((nByte+pFile->szChunk-1) / pFile->szChunk) * pFile->szChunk;
Zim84500122021-07-12 20:57:49 +010096@@ -38012,7 +38028,7 @@
Nick Kralevich34084e22014-02-28 10:29:21 -080097 ** with the same permissions.
98 */
Alex Naidis60fa6fd2016-07-10 14:13:38 +020099 if( osFstat(pDbFd->h, &sStat) ){
Nick Kralevich34084e22014-02-28 10:29:21 -0800100- rc = SQLITE_IOERR_FSTAT;
101+ rc = unixLogError(SQLITE_IOERR_FSTAT, "fstat", pDbFd->zPath);
102 goto shm_open_err;
103 }
104
Zim84500122021-07-12 20:57:49 +0100105@@ -128302,7 +128318,7 @@
Jeff Brown0bc48362012-04-19 19:17:00 -0700106 }
107 if( pDb->pSchema->file_format>SQLITE_MAX_FILE_FORMAT ){
108 sqlite3SetString(pzErrMsg, db, "unsupported file format");
109- rc = SQLITE_ERROR;
Alex Naidis60fa6fd2016-07-10 14:13:38 +0200110+ rc = SQLITE_CORRUPT_BKPT; // Android Change from "rc = SQLITE_ERROR;";
Jeff Brown0bc48362012-04-19 19:17:00 -0700111 goto initone_error_out;
112 }
113
Zim84500122021-07-12 20:57:49 +0100114@@ -170259,13 +170275,25 @@
Nick Kralevich34084e22014-02-28 10:29:21 -0800115 ** module with sqlite.
116 */
117 if( SQLITE_OK==rc
118+#ifndef ANDROID /* fts3_tokenizer disabled for security reasons */
119 && SQLITE_OK==(rc = sqlite3Fts3InitHashTable(db, pHash, "fts3_tokenizer"))
120+#endif
121 && SQLITE_OK==(rc = sqlite3_overload_function(db, "snippet", -1))
122 && SQLITE_OK==(rc = sqlite3_overload_function(db, "offsets", 1))
123 && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 1))
124 && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 2))
Jeff Brown0bc48362012-04-19 19:17:00 -0700125 && SQLITE_OK==(rc = sqlite3_overload_function(db, "optimize", 1))
126 ){
Nick Kralevich34084e22014-02-28 10:29:21 -0800127+#ifdef SQLITE_ENABLE_FTS3_BACKWARDS
128+ rc = sqlite3_create_module_v2(
129+ db, "fts1", &fts3Module, (void *)pHash, 0
130+ );
131+ if(rc) return rc;
132+ rc = sqlite3_create_module_v2(
133+ db, "fts2", &fts3Module, (void *)pHash, 0
134+ );
135+ if(rc) return rc;
136+#endif
Jeff Brown0bc48362012-04-19 19:17:00 -0700137 rc = sqlite3_create_module_v2(
Nick Kralevich34084e22014-02-28 10:29:21 -0800138 db, "fts3", &fts3Module, (void *)pHash, hashDestroy
Nick Kralevich59026eb2016-04-16 22:12:55 -0700139 );