This is an automated email from the ASF dual-hosted git repository.

rxl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar-client-go.git


The following commit(s) were added to refs/heads/master by this push:
     new a8270eb  fix nil pointer dereference in TopicNameWithoutPartitionPart 
(#734)
a8270eb is described below

commit a8270ebb7549e6206f82ffec0ea5c75d4f2f1ded
Author: Jeremy <hant...@outlook.com>
AuthorDate: Tue May 24 12:09:59 2022 +0800

    fix nil pointer dereference in TopicNameWithoutPartitionPart (#734)
    
    Signed-off-by: hantmac <hant...@outlook.com>
    
    add error check
    
    Signed-off-by: hantmac <hant...@outlook.com>
---
 pulsar/consumer_partition_test.go  |  4 +---
 pulsar/internal/metrics.go         |  5 ++++-
 pulsar/internal/topic_name.go      |  3 +++
 pulsar/internal/topic_name_test.go | 12 ++++++++----
 4 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/pulsar/consumer_partition_test.go 
b/pulsar/consumer_partition_test.go
index e7fcd5d..2255e52 100644
--- a/pulsar/consumer_partition_test.go
+++ b/pulsar/consumer_partition_test.go
@@ -21,11 +21,9 @@ import (
        "sync"
        "testing"
 
+       "github.com/apache/pulsar-client-go/pulsar/internal"
        "github.com/apache/pulsar-client-go/pulsar/internal/crypto"
-
        "github.com/stretchr/testify/assert"
-
-       "github.com/apache/pulsar-client-go/pulsar/internal"
 )
 
 func TestSingleMessageIDNoAckTracker(t *testing.T) {
diff --git a/pulsar/internal/metrics.go b/pulsar/internal/metrics.go
index ec1a96e..1cab470 100644
--- a/pulsar/internal/metrics.go
+++ b/pulsar/internal/metrics.go
@@ -482,7 +482,10 @@ func NewMetricsProvider(metricsCardinality int, 
userDefinedLabels map[string]str
 
 func (mp *Metrics) GetLeveledMetrics(t string) *LeveledMetrics {
        labels := make(map[string]string, 3)
-       tn, _ := ParseTopicName(t)
+       tn, err := ParseTopicName(t)
+       if err != nil {
+               return nil
+       }
        topic := TopicNameWithoutPartitionPart(tn)
        switch mp.metricsLevel {
        case 4:
diff --git a/pulsar/internal/topic_name.go b/pulsar/internal/topic_name.go
index 86a1ebe..481e41f 100644
--- a/pulsar/internal/topic_name.go
+++ b/pulsar/internal/topic_name.go
@@ -107,6 +107,9 @@ func ParseTopicName(topic string) (*TopicName, error) {
 }
 
 func TopicNameWithoutPartitionPart(tn *TopicName) string {
+       if tn == nil {
+               return ""
+       }
        if tn.Partition < 0 {
                return tn.Name
        }
diff --git a/pulsar/internal/topic_name_test.go 
b/pulsar/internal/topic_name_test.go
index f08fcd0..ab6537b 100644
--- a/pulsar/internal/topic_name_test.go
+++ b/pulsar/internal/topic_name_test.go
@@ -104,20 +104,24 @@ func TestParseTopicNameErrors(t *testing.T) {
 
 func TestTopicNameWithoutPartitionPart(t *testing.T) {
        tests := []struct {
-               tn       TopicName
+               tn       *TopicName
                expected string
        }{
                {
-                       tn:       TopicName{Name: 
"persistent://public/default/my-topic", Partition: -1},
+                       tn:       &TopicName{Name: 
"persistent://public/default/my-topic", Partition: -1},
                        expected: "persistent://public/default/my-topic",
                },
                {
-                       tn:       TopicName{Name: 
"persistent://public/default/my-topic-partition-0", Partition: 0},
+                       tn:       &TopicName{Name: 
"persistent://public/default/my-topic-partition-0", Partition: 0},
                        expected: "persistent://public/default/my-topic",
                },
+               {
+                       tn:       nil,
+                       expected: "",
+               },
        }
        for _, test := range tests {
-               assert.Equal(t, test.expected, 
TopicNameWithoutPartitionPart(&test.tn))
+               assert.Equal(t, test.expected, 
TopicNameWithoutPartitionPart(test.tn))
        }
 }
 

Reply via email to