Merge pull request #2460 from nats-io/long-stream-name-panic

Use append in case pubAck is larger than stack []byte
This commit is contained in:
Derek Collison
2021-08-20 16:45:38 -07:00
committed by GitHub
2 changed files with 28 additions and 3 deletions

View File

@@ -12884,6 +12884,32 @@ func TestJetStreamExpireAllWhileServerDown(t *testing.T) {
}
}
func TestJetStreamLongStreamNamesAndPubAck(t *testing.T) {
s := RunBasicJetStreamServer()
defer s.Shutdown()
config := s.JetStreamConfig()
if config != nil {
defer removeDir(t, config.StoreDir)
}
nc, js := jsClientConnect(t, s)
defer nc.Close()
data := make([]byte, 256)
rand.Read(data)
stream := base64.StdEncoding.EncodeToString(data)[:256]
cfg := &nats.StreamConfig{
Name: stream,
Subjects: []string{"foo"},
}
if _, err := js.AddStream(cfg); err != nil {
t.Fatalf("Unexpected error: %v", err)
}
js.Publish("foo", []byte("HELLO"))
}
///////////////////////////////////////////////////////////////////////////
// Simple JetStream Benchmarks
///////////////////////////////////////////////////////////////////////////

View File

@@ -2594,9 +2594,8 @@ func (mset *stream) processJetStreamMsg(subject, reply string, hdr, msg []byte,
var resp = &JSPubAckResponse{}
var buf [128]byte
copy(buf[0:], mset.pubAck)
pubAck := buf[:len(mset.pubAck)]
var buf [256]byte
pubAck := append(buf[:0], mset.pubAck...)
// For clustering the lower layers will pass our expected lseq. If it is present check for that here.
if lseq > 0 && lseq != (mset.lseq+mset.clfs) {