From e07e507d1af687cd64b263038ebd3cb7be74fb40 Mon Sep 17 00:00:00 2001
From: Eugene Valeyev <evgen.povt@gmail.com>
Date: Mon, 13 Aug 2018 17:27:25 +0300
Subject: [PATCH] whisper: fixed broken partial topic filtering

Changes in #15811 broke partial topic filtering. Re-enable it.
---
 whisper/whisperv5/filter.go      |  2 +-
 whisper/whisperv5/filter_test.go |  8 +++----
 whisper/whisperv6/filter.go      | 17 ---------------
 whisper/whisperv6/filter_test.go | 36 --------------------------------
 4 files changed, 5 insertions(+), 58 deletions(-)

diff --git a/whisper/whisperv5/filter.go b/whisper/whisperv5/filter.go
index 3190334eb..9550a7e38 100644
--- a/whisper/whisperv5/filter.go
+++ b/whisper/whisperv5/filter.go
@@ -220,7 +220,7 @@ func matchSingleTopic(topic TopicType, bt []byte) bool {
 		bt = bt[:TopicLength]
 	}
 
-	if len(bt) < TopicLength {
+	if len(bt) == 0 {
 		return false
 	}
 
diff --git a/whisper/whisperv5/filter_test.go b/whisper/whisperv5/filter_test.go
index 01034a351..c01c22668 100644
--- a/whisper/whisperv5/filter_test.go
+++ b/whisper/whisperv5/filter_test.go
@@ -829,16 +829,16 @@ func TestMatchSingleTopic_WithTail_ReturnTrue(t *testing.T) {
 	}
 }
 
-func TestMatchSingleTopic_NotEquals_ReturnFalse(t *testing.T) {
+func TestMatchSingleTopic_PartialTopic_ReturnTrue(t *testing.T) {
 	bt := []byte("tes")
-	topic := BytesToTopic(bt)
+	topic := BytesToTopic([]byte("test"))
 
-	if matchSingleTopic(topic, bt) {
+	if !matchSingleTopic(topic, bt) {
 		t.FailNow()
 	}
 }
 
-func TestMatchSingleTopic_InsufficientLength_ReturnFalse(t *testing.T) {
+func TestMatchSingleTopic_NotEquals_ReturnFalse(t *testing.T) {
 	bt := []byte("test")
 	topic := BytesToTopic([]byte("not_equal"))
 
diff --git a/whisper/whisperv6/filter.go b/whisper/whisperv6/filter.go
index 2f170ddeb..6a5b79674 100644
--- a/whisper/whisperv6/filter.go
+++ b/whisper/whisperv6/filter.go
@@ -250,23 +250,6 @@ func (f *Filter) MatchEnvelope(envelope *Envelope) bool {
 	return f.PoW <= 0 || envelope.pow >= f.PoW
 }
 
-func matchSingleTopic(topic TopicType, bt []byte) bool {
-	if len(bt) > TopicLength {
-		bt = bt[:TopicLength]
-	}
-
-	if len(bt) < TopicLength {
-		return false
-	}
-
-	for j, b := range bt {
-		if topic[j] != b {
-			return false
-		}
-	}
-	return true
-}
-
 // IsPubKeyEqual checks that two public keys are equal
 func IsPubKeyEqual(a, b *ecdsa.PublicKey) bool {
 	if !ValidatePublicKey(a) {
diff --git a/whisper/whisperv6/filter_test.go b/whisper/whisperv6/filter_test.go
index 0bb7986c3..82e4aa024 100644
--- a/whisper/whisperv6/filter_test.go
+++ b/whisper/whisperv6/filter_test.go
@@ -829,39 +829,3 @@ func TestVariableTopics(t *testing.T) {
 		}
 	}
 }
-
-func TestMatchSingleTopic_ReturnTrue(t *testing.T) {
-	bt := []byte("test")
-	topic := BytesToTopic(bt)
-
-	if !matchSingleTopic(topic, bt) {
-		t.FailNow()
-	}
-}
-
-func TestMatchSingleTopic_WithTail_ReturnTrue(t *testing.T) {
-	bt := []byte("test with tail")
-	topic := BytesToTopic([]byte("test"))
-
-	if !matchSingleTopic(topic, bt) {
-		t.FailNow()
-	}
-}
-
-func TestMatchSingleTopic_NotEquals_ReturnFalse(t *testing.T) {
-	bt := []byte("tes")
-	topic := BytesToTopic(bt)
-
-	if matchSingleTopic(topic, bt) {
-		t.FailNow()
-	}
-}
-
-func TestMatchSingleTopic_InsufficientLength_ReturnFalse(t *testing.T) {
-	bt := []byte("test")
-	topic := BytesToTopic([]byte("not_equal"))
-
-	if matchSingleTopic(topic, bt) {
-		t.FailNow()
-	}
-}
-- 
GitLab