Fix panic in ParseMessage

There is a chance the function can panic if a comma is included in the
input which is invalid.
This commit is contained in:
boreq 2023-06-20 14:05:57 +02:00 committed by fiatjaf_
parent f4102ea8d2
commit b984a598cb
2 changed files with 36 additions and 0 deletions

View File

@ -35,6 +35,8 @@ func ParseMessage(message []byte) Envelope {
case bytes.Contains(label, []byte("CLOSE")):
x := CloseEnvelope("")
v = &x
default:
return nil
}
if err := v.UnmarshalJSON(message); err != nil {

View File

@ -2,6 +2,7 @@ package nostr
import (
"encoding/json"
"reflect"
"testing"
)
@ -110,3 +111,36 @@ func TestAuthEnvelopeEncodingAndDecoding(t *testing.T) {
}
}
}
func TestParseMessage(t *testing.T) {
testCases := []struct {
Name string
Message []byte
ExpectedEnvelope interface{}
}{
{
Name: "nil",
Message: nil,
ExpectedEnvelope: nil,
},
{
Name: "invalid string",
Message: []byte("invalid input"),
ExpectedEnvelope: nil,
},
{
Name: "invalid string with a comma",
Message: []byte("invalid, input"),
ExpectedEnvelope: nil,
},
}
for _, testCase := range testCases {
t.Run(testCase.Name, func(t *testing.T) {
envelope := ParseMessage(testCase.Message)
if !reflect.DeepEqual(testCase.ExpectedEnvelope, envelope) {
t.Fatal("unexpected output")
}
})
}
}