summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2022-11-18 16:18:11 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2022-11-18 20:16:43 +0900
commit1bebd6f4f5fac7c98ad01696fd819c3c82e41ec6 (patch)
tree93e6f1e4c1528fc2cd8f1035b82555fd02978c88
parent3da63f394d016b6ad1861a022ea60b597d6ac030 (diff)
Fix panic on inverse match query with `--tiebreak=chunk`
Fix #3055
-rw-r--r--CHANGELOG.md4
-rw-r--r--src/result.go23
-rwxr-xr-xtest/test_go.rb4
3 files changed, 20 insertions, 11 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 56d460a4..de3b9aff 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,10 @@
CHANGELOG
=========
+0.35.1
+------
+- Fixed a bug where fzf with `--tiebreak=chunk` crashes on inverse match query
+
0.35.0
------
- Added `start` event that is triggered only once when fzf finder starts.
diff --git a/src/result.go b/src/result.go
index c4acb5fa..1212cabe 100644
--- a/src/result.go
+++ b/src/result.go
@@ -50,20 +50,21 @@ func buildResult(item *Item, offsets []Offset, score int) Result {
// Higher is better
val = math.MaxUint16 - util.AsUint16(score)
case byChunk:
- b := minBegin
- e := maxEnd
- l := item.text.Length()
- for ; b >= 1; b-- {
- if unicode.IsSpace(item.text.Get(b - 1)) {
- break
+ if validOffsetFound {
+ b := minBegin
+ e := maxEnd
+ for ; b >= 1; b-- {
+ if unicode.IsSpace(item.text.Get(b - 1)) {
+ break
+ }
}
- }
- for ; e < l; e++ {
- if unicode.IsSpace(item.text.Get(e)) {
- break
+ for ; e < numChars; e++ {
+ if unicode.IsSpace(item.text.Get(e)) {
+ break
+ }
}
+ val = util.AsUint16(e - b)
}
- val = util.AsUint16(e - b)
case byLength:
val = item.TrimLength()
case byBegin, byEnd:
diff --git a/test/test_go.rb b/test/test_go.rb
index 41767fce..b7ae1511 100755
--- a/test/test_go.rb
+++ b/test/test_go.rb
@@ -779,6 +779,10 @@ class TestGoFZF < TestBase
'2 foobar baz',
'3 foo barbaz'
], `#{FZF} -fba --tiebreak=chunk < #{tempname}`.lines(chomp: true)
+
+ assert_equal [
+ '3 foo barbaz'
+ ], `#{FZF} -f'!foobar' --tiebreak=chunk < #{tempname}`.lines(chomp: true)
end
def test_invalid_cache