From: dan Date: Wed, 17 Jun 2020 14:54:06 +0000 (+0000) Subject: Fix an assert() in fts3 that could fail when processing a corrupt record. X-Git-Tag: version-3.33.0~114 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0ad1b3284a241336fee692fc555b2ca5567e043b;p=thirdparty%2Fsqlite.git Fix an assert() in fts3 that could fail when processing a corrupt record. FossilOrigin-Name: 4adc0a1b0d84c2df6d6bf0d5d9d3fa9f7d048af8d232c4beb77518727890f212 --- diff --git a/ext/fts3/fts3.c b/ext/fts3/fts3.c index d03e7eefb3..afea064cb2 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 08766c3872..c0d32fa03d 100644 --- a/manifest +++ b/manifest @@ -1,10 +1,10 @@ B fd5abb1a7b5a55127d5c0d5ff448020d8bccab44e4f5afe1eb88fc19578af735 -C Fix\sa\sproblem\swith\sretrying\sconstraint\sfailures\swithin\ssqlite3changeset_apply()\scalls\swith\sthe\sSQLITE_CHANGESET_INVERT\sflag\sis\sset. -D 2020-06-17T14:14:11.666 +C Fix\san\sassert()\sin\sfts3\sthat\scould\sfail\swhen\sprocessing\sa\scorrupt\srecord. +D 2020-06-17T14:54:06.215 F configure f594931bd7b23dad12db96b81e1dba43b41b30a4560d6eb008014e3d9f1617e8 x F configure.ac 13e4ecf89214c3aa0ba099a9e0178f13f03261ace627126737d8cee240ec5c1c F doc/wal-lock.md 781726aaba20bafeceb7ba9f91d5c98c6731691b30c954e37cf0b49a053d461d -F ext/fts3/fts3.c ad3416827315a5bef8d0e23d8e90bf29940fbec23ee78aa0c5d3caed85072dec +F ext/fts3/fts3.c b0e864379ff9bdc375b6a1c5e401f79f993cc9387978aa11ba87b0c1ef73ce2e F ext/session/session_common.tcl f613174665456b2d916ae8df3e5735092a1c1712f36f46840172e9a01e8cc53e F ext/session/sessioninvert.test 04075517a9497a80d39c495ba6b44f3982c7371129b89e2c52219819bc105a25 F ext/session/sqlite3session.c fc8c6c13dc0456943ff24abf574ced10418eec66a548c97d3eafbebe9fc5e908 @@ -23,7 +23,7 @@ F src/vdbe.c 985f92b5131d62654c3c26062a2e55b1c8f71c2e10497e23021c6650d5c392b3 F src/vtab.c 33ecf1d8b0fd1508fe23be9da40e48909c86a13db2725e273177eb47db2fc265 F src/window.c 88a63e6948ea924b3cf9ad8aff5ea1fa53bebdb2f13340867205fda16ed0f19c F test/fts3corrupt2.test e318f0676e5e78d5a4b702637e2bb25265954c08a1b1e4aaf93c7880bb0c67d0 -F test/fts3corrupt4.test 000cc36cf50f61e51a3ae35748ea883674a9d8b797880975e10866849eefb404 +F test/fts3corrupt4.test 4664c72bb49400b6f3d86627760129ee7962e4834869909c55037ff21ccd36b8 F test/fuzzdata8.db e7a6a1444adb7bd10dec870234979ddd63173314c7345e3def2d892dcf99d48f F test/istrue.test 06f92ea38750fa74df7dbbe6920205251c2310861fbbe23a3adfa918a2e2ba74 F test/select3.test c49fbb758903f3718e2de5aa4655eda4838131cbea24a86db908f8b6889aa68c @@ -32,7 +32,7 @@ F test/where.test f5e62453537e5b335b69f3b09f8a02ce3328289fad5d866e25371284b837d7 F test/whereG.test 9363b2a97d914cb1b81aff5069ef0cf2a071a67e2b604eac6fe9c0114017d9aa F test/window1.test 9d7f4990e5b36d95af93b189da4aa75216c6690ce95cced3c8b6d3234be51c2c F test/without_rowid3.test 96426a6c9a2a5cf62bbe55ea1ad038eaaf4bf743f40a1ad517233b8e5a3d4339 -P c6b1d3a385751633d3ac1853e13d5e847185dd6432fb8b960a4080f61357c08c -R 1c31ce9492a1552b437bdc6502d1c44a +P d73e857b833dfc29400049ca7f01ca465f980466e3aa67214c3c5e5573181419 +R fad1962efa665077ebb220317fee79c1 U dan -Z 7c6b85ada24210dbbf9cdb2233bd591e +Z 22b7adc607746dfc70b52eaa1489f89e diff --git a/manifest.uuid b/manifest.uuid index 47d4d0968d..1ddf30e06a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d73e857b833dfc29400049ca7f01ca465f980466e3aa67214c3c5e5573181419 \ No newline at end of file +4adc0a1b0d84c2df6d6bf0d5d9d3fa9f7d048af8d232c4beb77518727890f212 \ 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