Fossil SCM
Proposed fix for the search branch bug reported in [forum:520d420d04e482b2|forum post 520d420d04]. This seems to work but could use more testing. To hit the affected query, first run (fossil fts-config index off) then (fossil search -fts ...terms...).
Commit
f4fdd7d385b7e063486a4e5dca043f083f46ee0c964f7a3140032d5456fa2b43
Parent
94c8af02ea1c173…
1 file changed
+5
-3
+5
-3
| --- src/search.c | ||
| +++ src/search.c | ||
| @@ -804,21 +804,23 @@ | ||
| 804 | 804 | " SELECT printf('Document: %%s',title('d',blob.rid,foci.filename))," |
| 805 | 805 | " printf('/doc/%T/%%s',foci.filename)," |
| 806 | 806 | " search_score()," |
| 807 | 807 | " 'd'||blob.rid," |
| 808 | 808 | " (SELECT datetime(event.mtime) FROM event" |
| 809 | - " WHERE objid=symbolic_name_to_rid('trunk'))," | |
| 809 | + " WHERE objid=symbolic_name_to_rid(%Q))," | |
| 810 | 810 | " search_snippet()" |
| 811 | 811 | " FROM foci CROSS JOIN blob" |
| 812 | - " WHERE checkinID=symbolic_name_to_rid('trunk')" | |
| 812 | + " WHERE checkinID=symbolic_name_to_rid(%Q)" | |
| 813 | 813 | " AND blob.uuid=foci.uuid" |
| 814 | 814 | " AND search_match(title('d',blob.rid,foci.filename)," |
| 815 | 815 | " body('d',blob.rid,foci.filename))" |
| 816 | 816 | " AND %z", |
| 817 | - zDocBr, glob_expr("foci.filename", zDocGlob) | |
| 817 | + zDocBr, zDocBr, zDocBr, glob_expr("foci.filename", zDocGlob) | |
| 818 | 818 | ); |
| 819 | 819 | } |
| 820 | + fossil_free(zDocGlob); | |
| 821 | + fossil_free(zDocBr); | |
| 820 | 822 | } |
| 821 | 823 | if( (srchFlags & SRCH_WIKI)!=0 ){ |
| 822 | 824 | db_multi_exec( |
| 823 | 825 | "WITH wiki(name,rid,mtime) AS (" |
| 824 | 826 | " SELECT substr(tagname,6), tagxref.rid, max(tagxref.mtime)" |
| 825 | 827 |
| --- src/search.c | |
| +++ src/search.c | |
| @@ -804,21 +804,23 @@ | |
| 804 | " SELECT printf('Document: %%s',title('d',blob.rid,foci.filename))," |
| 805 | " printf('/doc/%T/%%s',foci.filename)," |
| 806 | " search_score()," |
| 807 | " 'd'||blob.rid," |
| 808 | " (SELECT datetime(event.mtime) FROM event" |
| 809 | " WHERE objid=symbolic_name_to_rid('trunk'))," |
| 810 | " search_snippet()" |
| 811 | " FROM foci CROSS JOIN blob" |
| 812 | " WHERE checkinID=symbolic_name_to_rid('trunk')" |
| 813 | " AND blob.uuid=foci.uuid" |
| 814 | " AND search_match(title('d',blob.rid,foci.filename)," |
| 815 | " body('d',blob.rid,foci.filename))" |
| 816 | " AND %z", |
| 817 | zDocBr, glob_expr("foci.filename", zDocGlob) |
| 818 | ); |
| 819 | } |
| 820 | } |
| 821 | if( (srchFlags & SRCH_WIKI)!=0 ){ |
| 822 | db_multi_exec( |
| 823 | "WITH wiki(name,rid,mtime) AS (" |
| 824 | " SELECT substr(tagname,6), tagxref.rid, max(tagxref.mtime)" |
| 825 |
| --- src/search.c | |
| +++ src/search.c | |
| @@ -804,21 +804,23 @@ | |
| 804 | " SELECT printf('Document: %%s',title('d',blob.rid,foci.filename))," |
| 805 | " printf('/doc/%T/%%s',foci.filename)," |
| 806 | " search_score()," |
| 807 | " 'd'||blob.rid," |
| 808 | " (SELECT datetime(event.mtime) FROM event" |
| 809 | " WHERE objid=symbolic_name_to_rid(%Q))," |
| 810 | " search_snippet()" |
| 811 | " FROM foci CROSS JOIN blob" |
| 812 | " WHERE checkinID=symbolic_name_to_rid(%Q)" |
| 813 | " AND blob.uuid=foci.uuid" |
| 814 | " AND search_match(title('d',blob.rid,foci.filename)," |
| 815 | " body('d',blob.rid,foci.filename))" |
| 816 | " AND %z", |
| 817 | zDocBr, zDocBr, zDocBr, glob_expr("foci.filename", zDocGlob) |
| 818 | ); |
| 819 | } |
| 820 | fossil_free(zDocGlob); |
| 821 | fossil_free(zDocBr); |
| 822 | } |
| 823 | if( (srchFlags & SRCH_WIKI)!=0 ){ |
| 824 | db_multi_exec( |
| 825 | "WITH wiki(name,rid,mtime) AS (" |
| 826 | " SELECT substr(tagname,6), tagxref.rid, max(tagxref.mtime)" |
| 827 |