Skip to content

Commit da463c6

Browse files
authored
fix panic from assignment to entry in nil map (#453)
1 parent f349a38 commit da463c6

File tree

3 files changed

+56
-0
lines changed

3 files changed

+56
-0
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
66

77
## [Unreleased]
88

9+
## [v1.6.1]
10+
- Fixed panic from assignment to entry in nil map [#453](https://github.com/xmidt-org/webpa-common/pull/453)
11+
912
## [v1.6.0]
1013
- Added session-id to device information [#451](https://github.com/xmidt-org/webpa-common/pull/451)
1114
- Added device metadata to outbound events [#451](https://github.com/xmidt-org/webpa-common/pull/451)

device/manager.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,9 @@ func updateEventMetadata(event Event) Event {
505505
}
506506

507507
// update metadata
508+
if msg.Metadata == nil {
509+
msg.Metadata = map[string]string{}
510+
}
508511
msg.Metadata["partner-ids"] = strings.Join(event.Device.PartnerIDs(), ",")
509512
msg.Metadata["session-id"] = event.Device.SessionID()
510513

device/manager_test.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,3 +447,53 @@ func TestUpdateMetadata(t *testing.T) {
447447
require.NoError(err)
448448
assert.Equal(expectedMetaData, newMessage.Metadata)
449449
}
450+
451+
func TestUpdateMetadataWithNil(t *testing.T) {
452+
assert := assert.New(t)
453+
require := require.New(t)
454+
msg := wrp.Message{
455+
Type: wrp.SimpleEventMessageType,
456+
Source: "external.com",
457+
Destination: "mac:FFEEAADD44443333",
458+
TransactionUUID: "DEADBEEF",
459+
Headers: []string{"Header1", "Header2"},
460+
Spans: [][]string{{"1", "2"}, {"3"}},
461+
Payload: []byte{1, 2, 3, 4, 0xff, 0xce},
462+
PartnerIDs: []string{"foo"},
463+
}
464+
originalContents := []byte{}
465+
err := wrp.NewEncoderBytes(&originalContents, wrp.Msgpack).Encode(&msg)
466+
require.NoError(err)
467+
device := newDevice(deviceOptions{
468+
ID: "mac:FFEEAADD44443333",
469+
C: nil,
470+
Compliance: 0,
471+
PartnerIDs: nil,
472+
SatClientID: "",
473+
Trust: "",
474+
QueueSize: 0,
475+
ConnectedAt: time.Time{},
476+
Logger: nil,
477+
})
478+
originalEvent := Event{
479+
Type: MessageReceived,
480+
Device: device,
481+
Message: &msg,
482+
Format: wrp.Msgpack,
483+
Contents: originalContents,
484+
}
485+
486+
event := updateEventMetadata(originalEvent)
487+
488+
assert.Equal(originalEvent.Device, event.Device)
489+
assert.Equal(originalEvent.Message, event.Message)
490+
assert.NotEqual(originalEvent.Contents, event.Contents)
491+
assert.Equal(originalEvent.Format, event.Format)
492+
493+
expectedMetaData := map[string]string{"session-id": device.SessionID(), "partner-ids": strings.Join(device.PartnerIDs(), ",")}
494+
495+
newMessage := new(wrp.Message)
496+
err = wrp.NewDecoderBytes(event.Contents, event.Format).Decode(newMessage)
497+
require.NoError(err)
498+
assert.Equal(expectedMetaData, newMessage.Metadata)
499+
}

0 commit comments

Comments
 (0)