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