Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix an off-by-one in the code for limiting the depth of FTS expression trees. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
72ac73189c3577740a77d2ea2fc71183 |
User & Date: | dan 2013-04-29 17:12:06.416 |
Context
2013-04-29
| ||
18:07 | Improve the error message issued when an FTS query exceeds the maximum allowable tree depth. (check-in: f480b1fe60 user: dan tags: trunk) | |
17:12 | Fix an off-by-one in the code for limiting the depth of FTS expression trees. (check-in: 72ac73189c user: dan tags: trunk) | |
09:17 | Fix mmap1.test so that it passes on windows as well as unix. (check-in: 52417eac3e user: dan tags: trunk) | |
Changes
Changes to ext/fts3/fts3_expr.c.
︙ | ︙ | |||
751 752 753 754 755 756 757 | /* ** Return SQLITE_ERROR if the maximum depth of the expression tree passed ** as the only argument is more than nMaxDepth. */ static int fts3ExprCheckDepth(Fts3Expr *p, int nMaxDepth){ int rc = SQLITE_OK; if( p ){ | | | 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 | /* ** Return SQLITE_ERROR if the maximum depth of the expression tree passed ** as the only argument is more than nMaxDepth. */ static int fts3ExprCheckDepth(Fts3Expr *p, int nMaxDepth){ int rc = SQLITE_OK; if( p ){ if( nMaxDepth<0 ){ rc = SQLITE_ERROR; }else{ rc = fts3ExprCheckDepth(p->pLeft, nMaxDepth-1); if( rc==SQLITE_OK ){ rc = fts3ExprCheckDepth(p->pRight, nMaxDepth-1); } } |
︙ | ︙ |
Changes to test/fts3expr3.test.
︙ | ︙ | |||
145 146 147 148 149 150 151 | do_test 3.$i { test_fts3expr2 "[random_and_query $i 1] OR [random_and_query $i 1]" } [list OR [balanced_and_tree $i] [balanced_and_tree $i]] } # Try trees of AND nodes with leaves that are themselves trees of OR nodes. # | | | > | > > > > > > > | 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | do_test 3.$i { test_fts3expr2 "[random_and_query $i 1] OR [random_and_query $i 1]" } [list OR [balanced_and_tree $i] [balanced_and_tree $i]] } # Try trees of AND nodes with leaves that are themselves trees of OR nodes. # for {set i 2} {$i < 64} {incr i 4} { do_test 3.$i { test_fts3expr2 [random_andor_query $i] } [balanced_andor_tree $i] } # These exceed the depth limit. # for {set i 65} {$i < 70} {incr i} { do_test 3.$i { list [catch {test_fts3expr2 [random_andor_query $i]} msg] $msg } {1 {Error parsing expression}} } # This also exceeds the depth limit. # do_test 4.1.1 { set q "1" for {set i 2} {$i < 5000} {incr i} { append q " AND $i" } list [catch {test_fts3expr2 $q} msg] $msg } {1 {Error parsing expression}} do_test 4.1.2 { set q "1" for {set i 2} {$i < 4000} {incr i} { append q " AND $i" } catch {test_fts3expr2 $q} } {0} proc create_toggle_tree {nDepth} { if {$nDepth == 0} { return xxx } set nNew [expr $nDepth-1] if {$nDepth % 2} { return "([create_toggle_tree $nNew]) OR ([create_toggle_tree $nNew])" } |
︙ | ︙ |