[FIXED] Fix nil pointer dereference in ConsumerInfo (#1987)

Also add test case that checks that correct error is returned when no
jetstream is avalilable on subscription.

Signed-off-by: John Smith <johnysfao@gmail.com>
This commit is contained in:
olde-ducke
2025-12-19 19:17:53 +03:00
committed by GitHub
parent a0e7b702c6
commit 654ca4ea87
2 changed files with 28 additions and 4 deletions

11
js.go
View File

@@ -2835,12 +2835,15 @@ func ConsumerFilterSubjects(subjects ...string) SubOpt {
func (sub *Subscription) ConsumerInfo() (*ConsumerInfo, error) {
sub.mu.Lock()
// TODO(dlc) - Better way to mark especially if we attach.
if sub.jsi == nil || sub.jsi.consumer == _EMPTY_ {
if sub.jsi.ordered {
sub.mu.Unlock()
if sub.jsi == nil {
sub.mu.Unlock()
return nil, ErrTypeSubscription
} else if sub.jsi.consumer == _EMPTY_ {
ordered := sub.jsi.ordered
sub.mu.Unlock()
if ordered {
return nil, ErrConsumerInfoOnOrderedReset
}
sub.mu.Unlock()
return nil, ErrTypeSubscription
}

View File

@@ -661,6 +661,27 @@ func TestBadSubjectsAndQueueNames(t *testing.T) {
}
}
func TestTypeSubscription(t *testing.T) {
s := RunServerOnPort(TEST_PORT)
defer s.Shutdown()
nc, err := nats.Connect(fmt.Sprintf("127.0.0.1:%d", TEST_PORT))
if err != nil {
t.Fatalf("Error connecting: %v", err)
}
defer nc.Close()
// Make sure that ConsumerInfo() returns invalid subscription type error
sub, err := nc.Subscribe("foo", func(_ *nats.Msg) {})
if err != nil {
t.Fatalf("Error subscribing: %v", err)
}
if _, err := sub.ConsumerInfo(); err != nats.ErrTypeSubscription {
t.Fatalf("Expected an error about invalid subscription type, got %v", err)
}
}
func BenchmarkNextMsgNoTimeout(b *testing.B) {
s := RunServerOnPort(TEST_PORT)
defer s.Shutdown()