Skip to content

Commit 26ce88e

Browse files
committed
Fix RTPSender.GetParameters crash
If a RTPSender doesn't have a track currently set and GetParameters is called we would call a method on a nil pointer. Now instead of checking the Track kind we store the kind in the RTPSender. Resolves pion#2065
1 parent 83eb2ac commit 26ce88e

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

rtpsender.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ type RTPSender struct {
2626
transport *DTLSTransport
2727

2828
payloadType PayloadType
29+
kind RTPCodecType
2930
ssrc SSRC
3031

3132
// nolint:godox
@@ -66,6 +67,7 @@ func (api *API) NewRTPSender(track TrackLocal, transport *DTLSTransport) (*RTPSe
6667
ssrc: SSRC(randutil.NewMathRandomGenerator().Uint32()),
6768
id: id,
6869
srtpStream: &srtpWriterFuture{},
70+
kind: track.Kind(),
6971
}
7072

7173
r.srtpStream.rtpSender = r
@@ -107,7 +109,7 @@ func (r *RTPSender) Transport() *DTLSTransport {
107109
func (r *RTPSender) getParameters() RTPSendParameters {
108110
sendParameters := RTPSendParameters{
109111
RTPParameters: r.api.mediaEngine.getRTPParametersByKind(
110-
r.track.Kind(),
112+
r.kind,
111113
[]RTPTransceiverDirection{RTPTransceiverDirectionSendonly},
112114
),
113115
Encodings: []RTPEncodingParameters{
@@ -122,7 +124,7 @@ func (r *RTPSender) getParameters() RTPSendParameters {
122124
if r.rtpTransceiver != nil {
123125
sendParameters.Codecs = r.rtpTransceiver.getCodecs()
124126
} else {
125-
sendParameters.Codecs = r.api.mediaEngine.getCodecsByKind(r.track.Kind())
127+
sendParameters.Codecs = r.api.mediaEngine.getCodecsByKind(r.kind)
126128
}
127129
return sendParameters
128130
}
@@ -149,7 +151,7 @@ func (r *RTPSender) ReplaceTrack(track TrackLocal) error {
149151
r.mu.Lock()
150152
defer r.mu.Unlock()
151153

152-
if track != nil && r.rtpTransceiver.kind != track.Kind() {
154+
if track != nil && r.kind != track.Kind() {
153155
return ErrRTPSenderNewTrackHasIncorrectKind
154156
}
155157

rtpsender_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,3 +255,19 @@ func Test_RTPSender_ReplaceTrack_InvalidCodecChange(t *testing.T) {
255255

256256
closePairNow(t, sender, receiver)
257257
}
258+
259+
func Test_RTPSender_GetParameters_NilTrack(t *testing.T) {
260+
track, err := NewTrackLocalStaticSample(RTPCodecCapability{MimeType: MimeTypeVP8}, "video", "pion")
261+
assert.NoError(t, err)
262+
263+
peerConnection, err := NewPeerConnection(Configuration{})
264+
assert.NoError(t, err)
265+
266+
rtpSender, err := peerConnection.AddTrack(track)
267+
assert.NoError(t, err)
268+
269+
assert.NoError(t, rtpSender.ReplaceTrack(nil))
270+
rtpSender.GetParameters()
271+
272+
assert.NoError(t, peerConnection.Close())
273+
}

0 commit comments

Comments
 (0)