Skip to content

Commit fd7d994

Browse files
committed
[FIXED] Stream and consumer name validation
1 parent 07d83b8 commit fd7d994

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

jsm.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -421,19 +421,20 @@ func checkStreamName(stream string) error {
421421
if stream == _EMPTY_ {
422422
return ErrStreamNameRequired
423423
}
424-
if strings.Contains(stream, ".") {
424+
if strings.ContainsAny(stream, ". ") {
425425
return ErrInvalidStreamName
426426
}
427427
return nil
428428
}
429429

430-
// Check that the durable name exists and is valid, that is, that it does not contain any "."
430+
// Check that the consumer name is not empty and is valid (does not contain "." and " ").
431+
// Additional consumer name validation is done in nats-server.
431432
// Returns ErrConsumerNameRequired if consumer name is empty, ErrInvalidConsumerName is invalid, otherwise nil
432433
func checkConsumerName(consumer string) error {
433434
if consumer == _EMPTY_ {
434435
return ErrConsumerNameRequired
435436
}
436-
if strings.Contains(consumer, ".") {
437+
if strings.ContainsAny(consumer, ". ") {
437438
return ErrInvalidConsumerName
438439
}
439440
return nil

test/js_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1781,6 +1781,9 @@ func TestJetStreamManagement(t *testing.T) {
17811781
if _, err := js.AddStream(&nats.StreamConfig{Name: "bad.stream.name"}); err != nats.ErrInvalidStreamName {
17821782
t.Fatalf("Expected %v, got %v", nats.ErrInvalidStreamName, err)
17831783
}
1784+
if _, err := js.AddStream(&nats.StreamConfig{Name: "bad stream name"}); err != nats.ErrInvalidStreamName {
1785+
t.Fatalf("Expected %v, got %v", nats.ErrInvalidStreamName, err)
1786+
}
17841787
})
17851788

17861789
t.Run("bad stream info", func(t *testing.T) {
@@ -1956,6 +1959,9 @@ func TestJetStreamManagement(t *testing.T) {
19561959
if _, err = js.AddConsumer("foo", &nats.ConsumerConfig{Durable: "test.durable"}); err != nats.ErrInvalidConsumerName {
19571960
t.Fatalf("Expected: %v; got: %v", nats.ErrInvalidConsumerName, err)
19581961
}
1962+
if _, err = js.AddConsumer("foo", &nats.ConsumerConfig{Durable: "test durable"}); err != nats.ErrInvalidConsumerName {
1963+
t.Fatalf("Expected: %v; got: %v", nats.ErrInvalidConsumerName, err)
1964+
}
19591965
})
19601966

19611967
t.Run("consumer with given name already exists, configs do not match", func(t *testing.T) {
@@ -3606,6 +3612,21 @@ func TestJetStreamImportDirectOnly(t *testing.T) {
36063612
}
36073613
}
36083614

3615+
func TestAS(t *testing.T) {
3616+
s := RunBasicJetStreamServer()
3617+
defer shutdownJSServerAndRemoveStorage(t, s)
3618+
3619+
nc, js := jsClient(t, s, nats.SyncQueueLen(500))
3620+
defer nc.Close()
3621+
3622+
var err error
3623+
3624+
_, err = js.AddStream(&nats.StreamConfig{Name: "foo"})
3625+
if err != nil {
3626+
t.Fatalf("Unexpected error: %v", err)
3627+
}
3628+
}
3629+
36093630
func TestJetStreamCrossAccountMirrorsAndSources(t *testing.T) {
36103631
conf := createConfFile(t, []byte(`
36113632
listen: 127.0.0.1:-1

0 commit comments

Comments
 (0)