From: drh Date: Wed, 17 Jun 2020 17:27:42 +0000 (+0000) Subject: Fix an assert() in fts3 that could fail when processing a corrupt record. X-Git-Tag: version-3.32.3~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d40a11dc2285d49bbd56e26e86f0a10e3b38bf31;p=thirdparty%2Fsqlite.git Fix an assert() in fts3 that could fail when processing a corrupt record. FossilOrigin-Name: ea71fb7fabcce71af05af14a8eaba3693f6bc859a18ab9f107eaac51260853fe --- diff --git a/ext/fts3/fts3.c b/ext/fts3/fts3.c index dc27d93b61..82d326ed7b 100644 --- a/ext/fts3/fts3.c +++ b/ext/fts3/fts3.c @@ -2338,7 +2338,7 @@ static int fts3PoslistPhraseMerge( /* Never set both isSaveLeft and isExact for the same invocation. */ assert( isSaveLeft==0 || isExact==0 ); - assert( p!=0 && *p1!=0 && *p2!=0 ); + assert_fts3_nc( p!=0 && *p1!=0 && *p2!=0 ); if( *p1==POS_COLUMN ){ p1++; p1 += fts3GetVarint32(p1, &iCol1); diff --git a/manifest b/manifest index 0ac637628f..922e290d17 100644 --- a/manifest +++ b/manifest @@ -1,29 +1,22 @@ B dafd2466a10f68acbe129010216f017a5fcfc048ffbc0da806d04f04e58cfcbb -C Merge\smiscellaneous\sfixes\sfrom\strunk\sinto\sthe\s3.32\sbranch. -D 2020-06-17T12:37:26.249 -F ext/fts3/fts3.c a93003c89b9c5cf2fbb870afb0afb7985c82f8dbd43f098cadae29058d26574f +C Fix\san\sassert()\sin\sfts3\sthat\scould\sfail\swhen\sprocessing\sa\scorrupt\srecord. +D 2020-06-17T17:27:42.376 +F ext/fts3/fts3.c 2e97a41c7b543602b06f2653e45a80040471e75faebe08cc8cc2a875e08c4573 F src/btree.c fabc215bd1ebab0e48108e95e0f50531da9883156b95888f479f6c696db032ad F src/expr.c 96cf4c2996a8ff3fe2281d9f3042ec5431ab2cbd793aa30881d992918b473487 F src/select.c bbd52d8405f0fdf70fe6643726467e39baa7402a0ab94ca0d509a28dfc689bcf F src/sqliteInt.h 04a6d2745c4f4849f5b8f898345e3548fe1df5aa910cc24f757ec69c9749478e F src/vdbe.c 907af2a69df180eb2127eb888db7d456a32e137a12786de4f977cf06a74b35a2 F test/fts3corrupt2.test e318f0676e5e78d5a4b702637e2bb25265954c08a1b1e4aaf93c7880bb0c67d0 -F test/fts3corrupt4.test 000cc36cf50f61e51a3ae35748ea883674a9d8b797880975e10866849eefb404 +F test/fts3corrupt4.test 4664c72bb49400b6f3d86627760129ee7962e4834869909c55037ff21ccd36b8 F test/fuzzdata8.db 9ce2e5f0d7e5e61d5f8f0817346b2a3db2aeebbaff20d04043521623ea0558be F test/istrue.test 06f92ea38750fa74df7dbbe6920205251c2310861fbbe23a3adfa918a2e2ba74 F test/select3.test c49fbb758903f3718e2de5aa4655eda4838131cbea24a86db908f8b6889aa68c F test/selectA.test 68de52409e45a3313d00b8461b48bef4fb729faf36ade9067a994eae55cc86f4 F test/whereG.test 9363b2a97d914cb1b81aff5069ef0cf2a071a67e2b604eac6fe9c0114017d9aa F test/window1.test 9d7f4990e5b36d95af93b189da4aa75216c6690ce95cced3c8b6d3234be51c2c -P dafd2466a10f68acbe129010216f017a5fcfc048ffbc0da806d04f04e58cfcbb -Q +10fa79d00f8091e5748c245f4cae5b5f499a5f8db20da741c130e05a21ede443 -Q +32a88bdd4be5acdc1b80856bf6e32724dc3a467d5050bec0fe1a3dfedcc06f34 -Q +44e573ecd5c2b60107133d60c51f3a04a3f904e9c1cf926e9b8ea977c7acae8d -Q +90b1169d1b200d35a3f9f0ad2ae35a1b336bdd9b1ad0494ba80a382354c8d8b8 -Q +9a4a40c45feb2bb89020dc7711b4753479112ceae7ce2a44521d72afeddfac83 -Q +a58a6d6fb241a50c4c7c9af8a9c65bc4746e905b2ae12290c7182afa944053a2 -Q +ad738286e2441b5e84d05366db3fcafabe66be766f21fe6c17f43a8fabab16fb -Q +cc1fffdeddf422404170fa163ab80372ae58b444d7012b2c164021b221709b3e -R 83717039b44d13d1e2482c30f6c8121c +P d55b8e7993997e6bd75396479c822947a1254b62c28c4bbb71b4ff4f1410a802 +Q +4adc0a1b0d84c2df6d6bf0d5d9d3fa9f7d048af8d232c4beb77518727890f212 +R f100ce1d1dd24c443d6f37be5e50d635 U drh -Z de07d70b676ae39dc1c19e1d06cfed27 +Z 89cb383605bae91c0693bc8d72810923 diff --git a/manifest.uuid b/manifest.uuid index 58ef611c3a..abd4f26a33 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d55b8e7993997e6bd75396479c822947a1254b62c28c4bbb71b4ff4f1410a802 \ No newline at end of file +ea71fb7fabcce71af05af14a8eaba3693f6bc859a18ab9f107eaac51260853fe \ No newline at end of file diff --git a/test/fts3corrupt4.test b/test/fts3corrupt4.test index c79a5a2379..27b4eb53b6 100644 --- a/test/fts3corrupt4.test +++ b/test/fts3corrupt4.test @@ -6112,4 +6112,15 @@ do_execsql_test 40.2 { set sqlite_fts3_enable_parentheses $saved +#------------------------------------------------------------------------- +reset_db +do_execsql_test 41.1 { + CREATE VIRTUAL TABLE t1 USING fts3(a,b,c); + INSERT INTO t1_segdir VALUES(0,0,0,0,'0 835',X'000130120106000106000106001f030001030001030000083230313630363039090107000107000107000001340901050001050001050000013509010400010400010400010730303030303030091c0400010400010400000662696e6172793c0301020200030102020003010202000301020200030102020003010202000301020200030102020003010202000301020200030102020003010202000008636f3870696c657209010200010200010200000664627374617409070300010300010300010465627567090402000102000102000006656e61626c653f07020001020001020001020001020001020001020001020001020001030001010002020001020001020001020001120001020001020001020001020001020001087874656e73696f6e091f0400010400010400000466747334090a0300010300010400030135090d03000103000103000003676363090103000103000103000106656f706f6c790910030001030001030000056a736f6e310913030001030001030000046c6f6164091f030001030001030000036d6178091c02000102000102000105656d6f7279091c03000103000103000304737973350916030001030001030000066e6f636173653c02010202000301020200030102020003010202000301020200030102020003010202000301020200030102020003010202000301020200030102020000046f6d6974091f020001020001020000057274726565091903000103000103000302696d3c010102020003010202000301020200030102020003010202000301020200030102020003010202000301020200030102020003010202000301020200000a746872656164736166650922020001020001020000047674616209070400010400010400000178b401010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200010101020001010102000101010200'); +} + +do_execsql_test 41.2 { + SELECT offsets(t1) FROM t1 WHERE t1 MATCH 'rtree ner "json1^enable"'; +} + finish_test