1*a3141fd3SAndroid Build Coastguard Worker--- orig/shell.c 2024-03-25 15:44:27.700300649 -0700 2*a3141fd3SAndroid Build Coastguard Worker+++ shell.c 2024-03-25 15:44:27.724300598 -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@@ -22266,6 +22271,21 @@ 16*a3141fd3SAndroid Build Coastguard Worker editFunc, 0, 0); 17*a3141fd3SAndroid Build Coastguard Worker #endif 18*a3141fd3SAndroid Build Coastguard Worker 19*a3141fd3SAndroid Build Coastguard Worker+// Begin Android Add 20*a3141fd3SAndroid Build Coastguard Worker+#ifndef NO_ANDROID_FUNCS 21*a3141fd3SAndroid Build Coastguard Worker+ int err = register_localized_collators(p->db, "en_US", 0); 22*a3141fd3SAndroid Build Coastguard Worker+ if (err != SQLITE_OK) { 23*a3141fd3SAndroid Build Coastguard Worker+ fprintf(stderr, "register_localized_collators() failed\n"); 24*a3141fd3SAndroid Build Coastguard Worker+ exit(1); 25*a3141fd3SAndroid Build Coastguard Worker+ } 26*a3141fd3SAndroid Build Coastguard Worker+ err = register_android_functions(p->db, 0); 27*a3141fd3SAndroid Build Coastguard Worker+ if (err != SQLITE_OK) { 28*a3141fd3SAndroid Build Coastguard Worker+ fprintf(stderr, "register_android_functions() failed\n"); 29*a3141fd3SAndroid Build Coastguard Worker+ exit(1); 30*a3141fd3SAndroid Build Coastguard Worker+ } 31*a3141fd3SAndroid Build Coastguard Worker+#endif 32*a3141fd3SAndroid Build Coastguard Worker+// End Android Add 33*a3141fd3SAndroid Build Coastguard Worker+ 34*a3141fd3SAndroid Build Coastguard Worker if( p->openMode==SHELL_OPEN_ZIPFILE ){ 35*a3141fd3SAndroid Build Coastguard Worker char *zSql = sqlite3_mprintf( 36*a3141fd3SAndroid Build Coastguard Worker "CREATE VIRTUAL TABLE zip USING zipfile(%Q);", zDbFilename); 37*a3141fd3SAndroid Build Coastguard Worker--- orig/sqlite3.c 2024-03-25 15:44:27.708300632 -0700 38*a3141fd3SAndroid Build Coastguard Worker+++ sqlite3.c 2024-03-25 15:44:27.748300548 -0700 39*a3141fd3SAndroid Build Coastguard Worker@@ -38035,6 +38035,10 @@ 40*a3141fd3SAndroid Build Coastguard Worker # include <sys/mount.h> 41*a3141fd3SAndroid Build Coastguard Worker #endif 42*a3141fd3SAndroid Build Coastguard Worker 43*a3141fd3SAndroid Build Coastguard Worker+#if defined(__BIONIC__) 44*a3141fd3SAndroid Build Coastguard Worker+# include <android/fdsan.h> 45*a3141fd3SAndroid Build Coastguard Worker+#endif 46*a3141fd3SAndroid Build Coastguard Worker+ 47*a3141fd3SAndroid Build Coastguard Worker #ifdef HAVE_UTIME 48*a3141fd3SAndroid Build Coastguard Worker # include <utime.h> 49*a3141fd3SAndroid Build Coastguard Worker #endif 50*a3141fd3SAndroid Build Coastguard Worker@@ -38643,6 +38647,12 @@ 51*a3141fd3SAndroid Build Coastguard Worker #if defined(FD_CLOEXEC) && (!defined(O_CLOEXEC) || O_CLOEXEC==0) 52*a3141fd3SAndroid Build Coastguard Worker osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC); 53*a3141fd3SAndroid Build Coastguard Worker #endif 54*a3141fd3SAndroid Build Coastguard Worker+ 55*a3141fd3SAndroid Build Coastguard Worker+#if defined(__BIONIC__) && __ANDROID_API__ >= __ANDROID_API_Q__ 56*a3141fd3SAndroid Build Coastguard Worker+ uint64_t tag = android_fdsan_create_owner_tag( 57*a3141fd3SAndroid Build Coastguard Worker+ ANDROID_FDSAN_OWNER_TYPE_SQLITE, fd); 58*a3141fd3SAndroid Build Coastguard Worker+ android_fdsan_exchange_owner_tag(fd, 0, tag); 59*a3141fd3SAndroid Build Coastguard Worker+#endif 60*a3141fd3SAndroid Build Coastguard Worker } 61*a3141fd3SAndroid Build Coastguard Worker return fd; 62*a3141fd3SAndroid Build Coastguard Worker } 63*a3141fd3SAndroid Build Coastguard Worker@@ -39223,7 +39233,13 @@ 64*a3141fd3SAndroid Build Coastguard Worker ** and move on. 65*a3141fd3SAndroid Build Coastguard Worker */ 66*a3141fd3SAndroid Build Coastguard Worker static void robust_close(unixFile *pFile, int h, int lineno){ 67*a3141fd3SAndroid Build Coastguard Worker+#if defined(__BIONIC__) && __ANDROID_API__ >= __ANDROID_API_Q__ 68*a3141fd3SAndroid Build Coastguard Worker+ uint64_t tag = android_fdsan_create_owner_tag( 69*a3141fd3SAndroid Build Coastguard Worker+ ANDROID_FDSAN_OWNER_TYPE_SQLITE, h); 70*a3141fd3SAndroid Build Coastguard Worker+ if( android_fdsan_close_with_tag(h, tag) ){ 71*a3141fd3SAndroid Build Coastguard Worker+#else 72*a3141fd3SAndroid Build Coastguard Worker if( osClose(h) ){ 73*a3141fd3SAndroid Build Coastguard Worker+#endif 74*a3141fd3SAndroid Build Coastguard Worker unixLogErrorAtLine(SQLITE_IOERR_CLOSE, "close", 75*a3141fd3SAndroid Build Coastguard Worker pFile ? pFile->zPath : 0, lineno); 76*a3141fd3SAndroid Build Coastguard Worker } 77*a3141fd3SAndroid Build Coastguard Worker@@ -41763,7 +41779,7 @@ 78*a3141fd3SAndroid Build Coastguard Worker SimulateIOError( rc=1 ); 79*a3141fd3SAndroid Build Coastguard Worker if( rc!=0 ){ 80*a3141fd3SAndroid Build Coastguard Worker storeLastErrno((unixFile*)id, errno); 81*a3141fd3SAndroid Build Coastguard Worker- return SQLITE_IOERR_FSTAT; 82*a3141fd3SAndroid Build Coastguard Worker+ return unixLogError(SQLITE_IOERR_FSTAT, "fstat", ((unixFile*)id)->zPath); 83*a3141fd3SAndroid Build Coastguard Worker } 84*a3141fd3SAndroid Build Coastguard Worker *pSize = buf.st_size; 85*a3141fd3SAndroid Build Coastguard Worker 86*a3141fd3SAndroid Build Coastguard Worker@@ -41799,7 +41815,7 @@ 87*a3141fd3SAndroid Build Coastguard Worker struct stat buf; /* Used to hold return values of fstat() */ 88*a3141fd3SAndroid Build Coastguard Worker 89*a3141fd3SAndroid Build Coastguard Worker if( osFstat(pFile->h, &buf) ){ 90*a3141fd3SAndroid Build Coastguard Worker- return SQLITE_IOERR_FSTAT; 91*a3141fd3SAndroid Build Coastguard Worker+ return unixLogError(SQLITE_IOERR_FSTAT, "fstat", pFile->zPath); 92*a3141fd3SAndroid Build Coastguard Worker } 93*a3141fd3SAndroid Build Coastguard Worker 94*a3141fd3SAndroid Build Coastguard Worker nSize = ((nByte+pFile->szChunk-1) / pFile->szChunk) * pFile->szChunk; 95*a3141fd3SAndroid Build Coastguard Worker@@ -42541,7 +42557,7 @@ 96*a3141fd3SAndroid Build Coastguard Worker ** with the same permissions. 97*a3141fd3SAndroid Build Coastguard Worker */ 98*a3141fd3SAndroid Build Coastguard Worker if( osFstat(pDbFd->h, &sStat) ){ 99*a3141fd3SAndroid Build Coastguard Worker- rc = SQLITE_IOERR_FSTAT; 100*a3141fd3SAndroid Build Coastguard Worker+ rc = unixLogError(SQLITE_IOERR_FSTAT, "fstat", pDbFd->zPath); 101*a3141fd3SAndroid Build Coastguard Worker goto shm_open_err; 102*a3141fd3SAndroid Build Coastguard Worker } 103*a3141fd3SAndroid Build Coastguard Worker 104*a3141fd3SAndroid Build Coastguard Worker@@ -140715,7 +140731,7 @@ 105*a3141fd3SAndroid Build Coastguard Worker } 106*a3141fd3SAndroid Build Coastguard Worker if( pDb->pSchema->file_format>SQLITE_MAX_FILE_FORMAT ){ 107*a3141fd3SAndroid Build Coastguard Worker sqlite3SetString(pzErrMsg, db, "unsupported file format"); 108*a3141fd3SAndroid Build Coastguard Worker- rc = SQLITE_ERROR; 109*a3141fd3SAndroid Build Coastguard Worker+ rc = SQLITE_CORRUPT_BKPT; // Android Change from "rc = SQLITE_ERROR;"; 110*a3141fd3SAndroid Build Coastguard Worker goto initone_error_out; 111*a3141fd3SAndroid Build Coastguard Worker } 112*a3141fd3SAndroid Build Coastguard Worker 113*a3141fd3SAndroid Build Coastguard Worker@@ -188307,7 +188323,9 @@ 114*a3141fd3SAndroid Build Coastguard Worker ** module with sqlite. 115*a3141fd3SAndroid Build Coastguard Worker */ 116*a3141fd3SAndroid Build Coastguard Worker if( SQLITE_OK==rc 117*a3141fd3SAndroid Build Coastguard Worker+#ifndef ANDROID /* fts3_tokenizer disabled for security reasons */ 118*a3141fd3SAndroid Build Coastguard Worker && SQLITE_OK==(rc=sqlite3Fts3InitHashTable(db,&pHash->hash,"fts3_tokenizer")) 119*a3141fd3SAndroid Build Coastguard Worker+#endif 120*a3141fd3SAndroid Build Coastguard Worker && SQLITE_OK==(rc = sqlite3_overload_function(db, "snippet", -1)) 121*a3141fd3SAndroid Build Coastguard Worker && SQLITE_OK==(rc = sqlite3_overload_function(db, "offsets", 1)) 122*a3141fd3SAndroid Build Coastguard Worker && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 1)) 123*a3141fd3SAndroid Build Coastguard Worker@@ -188318,6 +188336,20 @@ 124*a3141fd3SAndroid Build Coastguard Worker rc = sqlite3_create_module_v2( 125*a3141fd3SAndroid Build Coastguard Worker db, "fts3", &fts3Module, (void *)pHash, hashDestroy 126*a3141fd3SAndroid Build Coastguard Worker ); 127*a3141fd3SAndroid Build Coastguard Worker+#ifdef SQLITE_ENABLE_FTS3_BACKWARDS 128*a3141fd3SAndroid Build Coastguard Worker+ if( rc==SQLITE_OK ){ 129*a3141fd3SAndroid Build Coastguard Worker+ pHash->nRef++; 130*a3141fd3SAndroid Build Coastguard Worker+ rc = sqlite3_create_module_v2( 131*a3141fd3SAndroid Build Coastguard Worker+ db, "fts1", &fts3Module, (void *)pHash, hashDestroy 132*a3141fd3SAndroid Build Coastguard Worker+ ); 133*a3141fd3SAndroid Build Coastguard Worker+ } 134*a3141fd3SAndroid Build Coastguard Worker+ if( rc==SQLITE_OK ){ 135*a3141fd3SAndroid Build Coastguard Worker+ pHash->nRef++; 136*a3141fd3SAndroid Build Coastguard Worker+ rc = sqlite3_create_module_v2( 137*a3141fd3SAndroid Build Coastguard Worker+ db, "fts2", &fts3Module, (void *)pHash, hashDestroy 138*a3141fd3SAndroid Build Coastguard Worker+ ); 139*a3141fd3SAndroid Build Coastguard Worker+ } 140*a3141fd3SAndroid Build Coastguard Worker+#endif 141*a3141fd3SAndroid Build Coastguard Worker if( rc==SQLITE_OK ){ 142*a3141fd3SAndroid Build Coastguard Worker pHash->nRef++; 143*a3141fd3SAndroid Build Coastguard Worker rc = sqlite3_create_module_v2( 144