From: dan Date: Fri, 20 Dec 2019 13:24:11 +0000 (+0000) Subject: Ensure fts5 consistently calls sqlite3_value_text() before sqlite3_value_bytes()... X-Git-Tag: version-3.31.0~198 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=73b21382d4abf02c435b25c7c1da4dd614023068;p=thirdparty%2Fsqlite.git Ensure fts5 consistently calls sqlite3_value_text() before sqlite3_value_bytes(). This matters when storing blobs in fts5 tables within utf-16 databases. Fix for [cf36cb4e02]. FossilOrigin-Name: c16305eba0eb14368f2631b9a82b7eb4483c93f3b31257ee7c33f9b00c344379 --- diff --git a/ext/fts5/fts5_storage.c b/ext/fts5/fts5_storage.c index c5bf8024db..27fa45c19b 100644 --- a/ext/fts5/fts5_storage.c +++ b/ext/fts5/fts5_storage.c @@ -738,10 +738,11 @@ int sqlite3Fts5StorageIndexInsert( for(ctx.iCol=0; rc==SQLITE_OK && ctx.iColnCol; ctx.iCol++){ ctx.szCol = 0; if( pConfig->abUnindexed[ctx.iCol]==0 ){ + const char *zText = sqlite3_value_text(apVal[ctx.iCol+2]); + int nText = sqlite3_value_bytes(apVal[ctx.iCol+2]); rc = sqlite3Fts5Tokenize(pConfig, FTS5_TOKENIZE_DOCUMENT, - (const char*)sqlite3_value_text(apVal[ctx.iCol+2]), - sqlite3_value_bytes(apVal[ctx.iCol+2]), + zText, nText, (void*)&ctx, fts5StorageInsertCallback ); diff --git a/ext/fts5/test/fts5integrity.test b/ext/fts5/test/fts5integrity.test index 25c7277305..e8135b078f 100644 --- a/ext/fts5/test/fts5integrity.test +++ b/ext/fts5/test/fts5integrity.test @@ -210,4 +210,21 @@ foreach {tn pgsz} { } {1000} } +#------------------------------------------------------------------------- +reset_db +do_execsql_test 7.0 { + PRAGMA encoding = 'UTF-16'; + CREATE VIRTUAL TABLE vt0 USING fts5(c0); + INSERT INTO vt0 VALUES (x'46f0'); + SELECT quote(c0) FROM vt0; +} {X'46F0'} + +do_execsql_test 7.1 { + UPDATE vt0 SET c0=''; +} + +do_execsql_test 7.2 { + INSERT INTO vt0(vt0) VALUES('integrity-check'); +} + finish_test diff --git a/manifest b/manifest index a561736eb0..a3be36482a 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Do\snot\scontinue\san\sALTER\sTABLE\stree\swalk\sof\sa\ssubquery\sif\sa\sprior\serror\nis\sseen\sin\sthe\stree.\s\sReport\sthe\sproblem\simmediately,\swithout\scontinuing. -D 2019-12-20T12:55:21.482 +C Ensure\sfts5\sconsistently\scalls\ssqlite3_value_text()\sbefore\ssqlite3_value_bytes().\sThis\smatters\swhen\sstoring\sblobs\sin\sfts5\stables\swithin\sutf-16\sdatabases.\sFix\sfor\s[cf36cb4e02]. +D 2019-12-20T13:24:11.254 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -118,7 +118,7 @@ F ext/fts5/fts5_expr.c 2be456484786333d559dc2987a00f2750981fab91d52db8452a804627 F ext/fts5/fts5_hash.c 1cc0095646f5f3b46721aa112fb4f9bf29ae175cb5338f89dcec66ed97acfe75 F ext/fts5/fts5_index.c 99b77ae1f503978ca76985bcfff7345c822aed8bbaa8edb3747f804f614685b5 F ext/fts5/fts5_main.c 9db1f173d299466aeff89bd949fb1eb0a181265726fb56f11e07ea292dcc9a73 -F ext/fts5/fts5_storage.c 167e3d8f8052a71032d498e32a2f2ed5ffe489e5d4d47e298adfa02ed55c7882 +F ext/fts5/fts5_storage.c 87cd8365614533537f237c2c12bc47333f6287cc3b4c14ce0cfec831f186180c F ext/fts5/fts5_tcl.c 39bcbae507f594aad778172fa914cad0f585bf92fd3b078c686e249282db0d95 F ext/fts5/fts5_test_mi.c 08c11ec968148d4cb4119d96d819f8c1f329812c568bac3684f5464be177d3ee F ext/fts5/fts5_test_tok.c f96c6e193c466711d6d7828d5f190407fe7ab897062d371426dd3036f01258e7 @@ -182,7 +182,7 @@ F ext/fts5/test/fts5first.test 3fcf2365c00a15fc9704233674789a3b95131d12de18a9b99 F ext/fts5/test/fts5full.test e1701a112354e0ff9a1fdffb0c940c576530c33732ee20ac5e8361777070d717 F ext/fts5/test/fts5fuzz1.test 238d8c45f3b81342aa384de3e581ff2fa330bf922a7b69e484bbc06051a1080e F ext/fts5/test/fts5hash.test a4cf51acad99bfc43c16fb74f9d22495dc221ae0701fc5e908ca963a9b26a02b -F ext/fts5/test/fts5integrity.test 4317561cd25eca7df16aa1f7d1a700ee958059fa639785f94aba0a84df9ab17b +F ext/fts5/test/fts5integrity.test dea2ea1977a67256aa8346514dccd8f477863edaebf305486ab45dd004b646fd F ext/fts5/test/fts5interrupt.test 09613247b273a99889808ef852898177e671406fe71fdde7ea00e78ea283d227 F ext/fts5/test/fts5lastrowid.test be98fe3e03235296585b72daad7aed5717ba0062bae5e5c18dd6e04e194c6b28 F ext/fts5/test/fts5leftjoin.test c0b4cafb9661379e576dc4405c0891d8fcc2782680740513c4d1fc114b43d4ad @@ -1852,7 +1852,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 07beb3629e648e7feae4e786191514339ac1d8f6ba5bb6e7cc8a04bc1f1cd6ab -R 90a0618f94e6c2b48b3e57f071c32644 -U drh -Z e9630083ebe8d733d28678003df0c2ce +P 01ca865f31c0c817ede7f357401ef76cf311ae662397908464f53e1c147f5b6b +R 00fcb0f09947c903a1a870a5269ba6c2 +U dan +Z 3880b4023bbe5b3af0421eab38686cc0 diff --git a/manifest.uuid b/manifest.uuid index 9d671b8ad7..f5bf322d5e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -01ca865f31c0c817ede7f357401ef76cf311ae662397908464f53e1c147f5b6b \ No newline at end of file +c16305eba0eb14368f2631b9a82b7eb4483c93f3b31257ee7c33f9b00c344379 \ No newline at end of file