Skip to content

Commit b466aad

Browse files
authored
[FIXED] Stream and consumer name validation (#1219)
1 parent 07d83b8 commit b466aad

File tree

3 files changed

+12
-5
lines changed

3 files changed

+12
-5
lines changed

jserrors.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,10 @@ var (
8080
// ErrNotJSMessage is returned when attempting to get metadata from non JetStream message .
8181
ErrNotJSMessage JetStreamError = &jsError{message: "not a jetstream message"}
8282

83-
// ErrInvalidStreamName is returned when the provided stream name is invalid (contains '.').
83+
// ErrInvalidStreamName is returned when the provided stream name is invalid (contains '.' or ' ').
8484
ErrInvalidStreamName JetStreamError = &jsError{message: "invalid stream name"}
8585

86-
// ErrInvalidConsumerName is returned when the provided consumer name is invalid (contains '.').
86+
// ErrInvalidConsumerName is returned when the provided consumer name is invalid (contains '.' or ' ').
8787
ErrInvalidConsumerName JetStreamError = &jsError{message: "invalid consumer name"}
8888

8989
// ErrNoMatchingStream is returned when stream lookup by subject is unsuccessful.

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: 6 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) {

0 commit comments

Comments
 (0)