blob: 575f987ef5523bdb99a7541dc4a7f3fd3fc2ced6 [file] [log] [blame]
mydongistiny7df55b42019-10-13 17:11:33 -07001--- orig/shell.c 2019-10-11 04:26:28.000000000 -0700
2+++ shell.c 2019-10-13 17:10:21.013384784 -0700
Fyodor Kupolov0181ec22018-02-13 16:45:16 -08003@@ -87,6 +87,12 @@
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
Neil Fuller84c2f242019-03-11 19:31:59 +00009+#include <aicu/AIcu.h>
Jeff Brown0bc48362012-04-19 19:17:00 -070010+#include <sqlite3_android.h>
11+#endif
12+// End Android Add
13
Nick Kralevich8fecf562014-05-29 16:56:33 -070014 #if !defined(_WIN32) && !defined(WIN32)
Jeff Brown0bc48362012-04-19 19:17:00 -070015 # include <signal.h>
mydongistiny8320bdc2019-10-06 12:50:35 -070016@@ -12733,6 +12739,21 @@
Fyodor Kupolov0181ec22018-02-13 16:45:16 -080017 sqlite3_create_function(p->db, "edit", 2, SQLITE_UTF8, 0,
18 editFunc, 0, 0);
mydongistiny63ee58c2019-09-21 18:04:30 -070019 #endif
20+// Begin Android Add
21+#ifndef NO_ANDROID_FUNCS
22+ AIcu_initializeIcuOrDie();
23+ int err = register_localized_collators(p->db, "en_US", 0);
24+ if (err != SQLITE_OK) {
25+ fprintf(stderr, "register_localized_collators() failed\n");
26+ exit(1);
27+ }
28+ err = register_android_functions(p->db, 0);
29+ if (err != SQLITE_OK) {
30+ fprintf(stderr, "register_android_functions() failed\n");
31+ exit(1);
32+ }
33+#endif
34+// End Android Add
Fyodor Kupolov0181ec22018-02-13 16:45:16 -080035 if( p->openMode==SHELL_OPEN_ZIPFILE ){
36 char *zSql = sqlite3_mprintf(
37 "CREATE VIRTUAL TABLE zip USING zipfile(%Q);", p->zDbFilename);
mydongistiny7df55b42019-10-13 17:11:33 -070038--- orig/sqlite3.c 2019-10-11 04:26:28.000000000 -0700
39+++ sqlite3.c 2019-10-13 17:10:21.046718117 -0700
40@@ -32632,6 +32632,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
mydongistiny7df55b42019-10-13 17:11:33 -070051@@ -33392,6 +33396,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 }
mydongistiny7df55b42019-10-13 17:11:33 -070064@@ -33972,7 +33982,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 }
mydongistiny7df55b42019-10-13 17:11:33 -070078@@ -36505,7 +36521,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
mydongistiny7df55b42019-10-13 17:11:33 -070087@@ -36541,7 +36557,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;
mydongistiny7df55b42019-10-13 17:11:33 -070096@@ -37227,7 +37243,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
mydongistiny7df55b42019-10-13 17:11:33 -0700105@@ -54413,15 +54429,9 @@
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
mydongistiny7df55b42019-10-13 17:11:33 -0700114@@ -159452,7 +159455,7 @@
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 );