From 70ded4cbf06d19993d829d843a27002cf181c619 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com>
Date: Wed, 22 Apr 2015 17:25:54 +0300
Subject: [PATCH] xeth: fix un-decoded whisper RPC topic string bug

---
 xeth/whisper.go | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/xeth/whisper.go b/xeth/whisper.go
index 36c6ca63f..edb62c748 100644
--- a/xeth/whisper.go
+++ b/xeth/whisper.go
@@ -39,12 +39,17 @@ func (self *Whisper) HasIdentity(key string) bool {
 
 // Post injects a message into the whisper network for distribution.
 func (self *Whisper) Post(payload string, to, from string, topics []string, priority, ttl uint32) error {
+	// Decode the topic strings
+	topicsDecoded := make([][]byte, len(topics))
+	for i, topic := range topics {
+		topicsDecoded[i] = common.FromHex(topic)
+	}
 	// Construct the whisper message and transmission options
 	message := whisper.NewMessage(common.FromHex(payload))
 	options := whisper.Options{
 		To:     crypto.ToECDSAPub(common.FromHex(to)),
 		TTL:    time.Duration(ttl) * time.Second,
-		Topics: whisper.NewTopicsFromStrings(topics...),
+		Topics: whisper.NewTopics(topicsDecoded...),
 	}
 	if len(from) != 0 {
 		if key := self.Whisper.GetIdentity(crypto.ToECDSAPub(common.FromHex(from))); key != nil {
@@ -68,10 +73,19 @@ func (self *Whisper) Post(payload string, to, from string, topics []string, prio
 // Watch installs a new message handler to run in case a matching packet arrives
 // from the whisper network.
 func (self *Whisper) Watch(to, from string, topics [][]string, fn func(WhisperMessage)) int {
+	// Decode the topic strings
+	topicsDecoded := make([][][]byte, len(topics))
+	for i, condition := range topics {
+		topicsDecoded[i] = make([][]byte, len(condition))
+		for j, topic := range condition {
+			topicsDecoded[i][j] = common.FromHex(topic)
+		}
+	}
+	// Assemble and inject the filter into the whisper client
 	filter := whisper.Filter{
 		To:     crypto.ToECDSAPub(common.FromHex(to)),
 		From:   crypto.ToECDSAPub(common.FromHex(from)),
-		Topics: whisper.NewFilterTopicsFromStrings(topics...),
+		Topics: whisper.NewFilterTopics(topicsDecoded...),
 	}
 	filter.Fn = func(message *whisper.Message) {
 		fn(NewWhisperMessage(message))
-- 
GitLab