blob: e5c0fcf7c6c09384387d7a4e6f776d624079c882 [file] [log] [blame]
--- orig/shell.c 2024-03-25 15:44:27.700300649 -0700
+++ shell.c 2024-03-25 15:44:27.724300598 -0700
@@ -127,6 +127,11 @@
#endif
#include <ctype.h>
#include <stdarg.h>
+// Begin Android Add
+#ifndef NO_ANDROID_FUNCS
+#include <sqlite3_android.h>
+#endif
+// End Android Add
#if !defined(_WIN32) && !defined(WIN32)
# include <signal.h>
@@ -22266,6 +22271,21 @@
editFunc, 0, 0);
#endif
+// Begin Android Add
+#ifndef NO_ANDROID_FUNCS
+ int err = register_localized_collators(p->db, "en_US", 0);
+ if (err != SQLITE_OK) {
+ fprintf(stderr, "register_localized_collators() failed\n");
+ exit(1);
+ }
+ err = register_android_functions(p->db, 0);
+ if (err != SQLITE_OK) {
+ fprintf(stderr, "register_android_functions() failed\n");
+ exit(1);
+ }
+#endif
+// End Android Add
+
if( p->openMode==SHELL_OPEN_ZIPFILE ){
char *zSql = sqlite3_mprintf(
"CREATE VIRTUAL TABLE zip USING zipfile(%Q);", zDbFilename);
--- orig/sqlite3.c 2024-03-25 15:44:27.708300632 -0700
+++ sqlite3.c 2024-03-25 15:44:27.748300548 -0700
@@ -38035,6 +38035,10 @@
# include <sys/mount.h>
#endif
+#if defined(__BIONIC__)
+# include <android/fdsan.h>
+#endif
+
#ifdef HAVE_UTIME
# include <utime.h>
#endif
@@ -38643,6 +38647,12 @@
#if defined(FD_CLOEXEC) && (!defined(O_CLOEXEC) || O_CLOEXEC==0)
osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
#endif
+
+#if defined(__BIONIC__) && __ANDROID_API__ >= __ANDROID_API_Q__
+ uint64_t tag = android_fdsan_create_owner_tag(
+ ANDROID_FDSAN_OWNER_TYPE_SQLITE, fd);
+ android_fdsan_exchange_owner_tag(fd, 0, tag);
+#endif
}
return fd;
}
@@ -39223,7 +39233,13 @@
** and move on.
*/
static void robust_close(unixFile *pFile, int h, int lineno){
+#if defined(__BIONIC__) && __ANDROID_API__ >= __ANDROID_API_Q__
+ uint64_t tag = android_fdsan_create_owner_tag(
+ ANDROID_FDSAN_OWNER_TYPE_SQLITE, h);
+ if( android_fdsan_close_with_tag(h, tag) ){
+#else
if( osClose(h) ){
+#endif
unixLogErrorAtLine(SQLITE_IOERR_CLOSE, "close",
pFile ? pFile->zPath : 0, lineno);
}
@@ -41763,7 +41779,7 @@
SimulateIOError( rc=1 );
if( rc!=0 ){
storeLastErrno((unixFile*)id, errno);
- return SQLITE_IOERR_FSTAT;
+ return unixLogError(SQLITE_IOERR_FSTAT, "fstat", ((unixFile*)id)->zPath);
}
*pSize = buf.st_size;
@@ -41799,7 +41815,7 @@
struct stat buf; /* Used to hold return values of fstat() */
if( osFstat(pFile->h, &buf) ){
- return SQLITE_IOERR_FSTAT;
+ return unixLogError(SQLITE_IOERR_FSTAT, "fstat", pFile->zPath);
}
nSize = ((nByte+pFile->szChunk-1) / pFile->szChunk) * pFile->szChunk;
@@ -42541,7 +42557,7 @@
** with the same permissions.
*/
if( osFstat(pDbFd->h, &sStat) ){
- rc = SQLITE_IOERR_FSTAT;
+ rc = unixLogError(SQLITE_IOERR_FSTAT, "fstat", pDbFd->zPath);
goto shm_open_err;
}
@@ -140715,7 +140731,7 @@
}
if( pDb->pSchema->file_format>SQLITE_MAX_FILE_FORMAT ){
sqlite3SetString(pzErrMsg, db, "unsupported file format");
- rc = SQLITE_ERROR;
+ rc = SQLITE_CORRUPT_BKPT; // Android Change from "rc = SQLITE_ERROR;";
goto initone_error_out;
}
@@ -188307,7 +188323,9 @@
** module with sqlite.
*/
if( SQLITE_OK==rc
+#ifndef ANDROID /* fts3_tokenizer disabled for security reasons */
&& SQLITE_OK==(rc=sqlite3Fts3InitHashTable(db,&pHash->hash,"fts3_tokenizer"))
+#endif
&& SQLITE_OK==(rc = sqlite3_overload_function(db, "snippet", -1))
&& SQLITE_OK==(rc = sqlite3_overload_function(db, "offsets", 1))
&& SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 1))
@@ -188318,6 +188336,20 @@
rc = sqlite3_create_module_v2(
db, "fts3", &fts3Module, (void *)pHash, hashDestroy
);
+#ifdef SQLITE_ENABLE_FTS3_BACKWARDS
+ if( rc==SQLITE_OK ){
+ pHash->nRef++;
+ rc = sqlite3_create_module_v2(
+ db, "fts1", &fts3Module, (void *)pHash, hashDestroy
+ );
+ }
+ if( rc==SQLITE_OK ){
+ pHash->nRef++;
+ rc = sqlite3_create_module_v2(
+ db, "fts2", &fts3Module, (void *)pHash, hashDestroy
+ );
+ }
+#endif
if( rc==SQLITE_OK ){
pHash->nRef++;
rc = sqlite3_create_module_v2(