Zim | 8450012 | 2021-07-12 20:57:49 +0100 | [diff] [blame] | 1 | --- orig/shell.c 2021-07-12 20:54:40.989319871 +0100 |
| 2 | +++ shell.c 2021-07-12 20:54:51.609392247 +0100 |
Victor Chang | 6a1491e | 2020-10-06 12:31:32 +0100 | [diff] [blame] | 3 | @@ -95,6 +95,11 @@ |
Nick Kralevich | 3fcd43a | 2015-04-08 13:13:26 -0700 | [diff] [blame] | 4 | #endif |
Jeff Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 5 | #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 Kralevich | 8fecf56 | 2014-05-29 16:56:33 -0700 | [diff] [blame] | 13 | #if !defined(_WIN32) && !defined(WIN32) |
Jeff Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 14 | # include <signal.h> |
Victor Chang | 6a1491e | 2020-10-06 12:31:32 +0100 | [diff] [blame] | 15 | @@ -12957,6 +12962,22 @@ |
Fyodor Kupolov | 0181ec2 | 2018-02-13 16:45:16 -0800 | [diff] [blame] | 16 | sqlite3_create_function(p->db, "edit", 2, SQLITE_UTF8, 0, |
| 17 | editFunc, 0, 0); |
Haibo Huang | 880009b | 2019-06-11 14:59:02 -0700 | [diff] [blame] | 18 | #endif |
Jeff Brown | 9bee60b | 2014-08-20 16:41:25 -0700 | [diff] [blame] | 19 | + |
Haibo Huang | 880009b | 2019-06-11 14:59:02 -0700 | [diff] [blame] | 20 | +// Begin Android Add |
| 21 | +#ifndef NO_ANDROID_FUNCS |
Haibo Huang | 880009b | 2019-06-11 14:59:02 -0700 | [diff] [blame] | 22 | + 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 Kupolov | 0181ec2 | 2018-02-13 16:45:16 -0800 | [diff] [blame] | 34 | + |
| 35 | if( p->openMode==SHELL_OPEN_ZIPFILE ){ |
| 36 | char *zSql = sqlite3_mprintf( |
| 37 | "CREATE VIRTUAL TABLE zip USING zipfile(%Q);", p->zDbFilename); |
Zim | 8450012 | 2021-07-12 20:57:49 +0100 | [diff] [blame] | 38 | --- 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 Gao | c427784 | 2018-08-21 18:44:26 -0700 | [diff] [blame] | 41 | # 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 |
Zim | 8450012 | 2021-07-12 20:57:49 +0100 | [diff] [blame] | 51 | @@ -34167,6 +34171,12 @@ |
Josh Gao | c427784 | 2018-08-21 18:44:26 -0700 | [diff] [blame] | 52 | #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 | } |
Zim | 8450012 | 2021-07-12 20:57:49 +0100 | [diff] [blame] | 64 | @@ -34747,7 +34757,13 @@ |
Josh Gao | c427784 | 2018-08-21 18:44:26 -0700 | [diff] [blame] | 65 | ** 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 | } |
Zim | 8450012 | 2021-07-12 20:57:49 +0100 | [diff] [blame] | 78 | @@ -37281,7 +37297,7 @@ |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 79 | SimulateIOError( rc=1 ); |
| 80 | if( rc!=0 ){ |
Nick Kralevich | 3fcd43a | 2015-04-08 13:13:26 -0700 | [diff] [blame] | 81 | storeLastErrno((unixFile*)id, errno); |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 82 | - return SQLITE_IOERR_FSTAT; |
| 83 | + return unixLogError(SQLITE_IOERR_FSTAT, "fstat", ((unixFile*)id)->zPath); |
| 84 | } |
| 85 | *pSize = buf.st_size; |
| 86 | |
Zim | 8450012 | 2021-07-12 20:57:49 +0100 | [diff] [blame] | 87 | @@ -37317,7 +37333,7 @@ |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 88 | struct stat buf; /* Used to hold return values of fstat() */ |
| 89 | |
Nick Kralevich | 3fcd43a | 2015-04-08 13:13:26 -0700 | [diff] [blame] | 90 | if( osFstat(pFile->h, &buf) ){ |
| 91 | - return SQLITE_IOERR_FSTAT; |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 92 | + return unixLogError(SQLITE_IOERR_FSTAT, "fstat", pFile->zPath); |
Nick Kralevich | 3fcd43a | 2015-04-08 13:13:26 -0700 | [diff] [blame] | 93 | } |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 94 | |
| 95 | nSize = ((nByte+pFile->szChunk-1) / pFile->szChunk) * pFile->szChunk; |
Zim | 8450012 | 2021-07-12 20:57:49 +0100 | [diff] [blame] | 96 | @@ -38012,7 +38028,7 @@ |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 97 | ** with the same permissions. |
| 98 | */ |
Alex Naidis | 60fa6fd | 2016-07-10 14:13:38 +0200 | [diff] [blame] | 99 | if( osFstat(pDbFd->h, &sStat) ){ |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 100 | - rc = SQLITE_IOERR_FSTAT; |
| 101 | + rc = unixLogError(SQLITE_IOERR_FSTAT, "fstat", pDbFd->zPath); |
| 102 | goto shm_open_err; |
| 103 | } |
| 104 | |
Zim | 8450012 | 2021-07-12 20:57:49 +0100 | [diff] [blame] | 105 | @@ -128302,7 +128318,7 @@ |
Jeff Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 106 | } |
| 107 | if( pDb->pSchema->file_format>SQLITE_MAX_FILE_FORMAT ){ |
| 108 | sqlite3SetString(pzErrMsg, db, "unsupported file format"); |
| 109 | - rc = SQLITE_ERROR; |
Alex Naidis | 60fa6fd | 2016-07-10 14:13:38 +0200 | [diff] [blame] | 110 | + rc = SQLITE_CORRUPT_BKPT; // Android Change from "rc = SQLITE_ERROR;"; |
Jeff Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 111 | goto initone_error_out; |
| 112 | } |
| 113 | |
Zim | 8450012 | 2021-07-12 20:57:49 +0100 | [diff] [blame] | 114 | @@ -170259,13 +170275,25 @@ |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 115 | ** 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 Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 125 | && SQLITE_OK==(rc = sqlite3_overload_function(db, "optimize", 1)) |
| 126 | ){ |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 127 | +#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 Brown | 0bc4836 | 2012-04-19 19:17:00 -0700 | [diff] [blame] | 137 | rc = sqlite3_create_module_v2( |
Nick Kralevich | 34084e2 | 2014-02-28 10:29:21 -0800 | [diff] [blame] | 138 | db, "fts3", &fts3Module, (void *)pHash, hashDestroy |
Nick Kralevich | 59026eb | 2016-04-16 22:12:55 -0700 | [diff] [blame] | 139 | ); |