Fix crash of ObjC SDK sLD / sRD with incorrect SDP.
There are two problems with setLocalDescription / setRemoteDescription in ObjC SDK. First, RTCSessionDescription.nativeDescription returns a raw nullableSessionDescriptionInterface pointer, where sLD/sRD are calling Clone() method unconditionally, so it might crash. Second, unnecessary sLD/sRD calls Clone() of the raw pointer and does not delete it, so this pointer will leak. To solve these problems, I changed the return type of nativeDescription to std::unique_ptr and removed the call to Clone() method. Bug: webrtc:13022, webrtc:13035 Change-Id: Icbb87dda62d3a11af47ec74621cf64b8a6c05228 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/227380 Reviewed-by: Kári Helgason <kthelgason@webrtc.org> Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Commit-Queue: Byoungchan Lee <daniel.l@hpcnt.com> Cr-Commit-Position: refs/heads/master@{#34647}
This commit is contained in:
committed by
WebRTC LUCI CQ
parent
31c0cfdf7f
commit
33728152ca
@ -581,7 +581,7 @@ void PeerConnectionDelegateAdapter::OnRemoveTrack(
|
||||
RTC_DCHECK(completionHandler != nil);
|
||||
rtc::scoped_refptr<webrtc::SetLocalDescriptionObserverInterface> observer(
|
||||
new rtc::RefCountedObject<::SetSessionDescriptionObserver>(completionHandler));
|
||||
_peerConnection->SetLocalDescription(sdp.nativeDescription->Clone(), observer);
|
||||
_peerConnection->SetLocalDescription(sdp.nativeDescription, observer);
|
||||
}
|
||||
|
||||
- (void)setLocalDescriptionWithCompletionHandler:
|
||||
@ -597,7 +597,7 @@ void PeerConnectionDelegateAdapter::OnRemoveTrack(
|
||||
RTC_DCHECK(completionHandler != nil);
|
||||
rtc::scoped_refptr<webrtc::SetRemoteDescriptionObserverInterface> observer(
|
||||
new rtc::RefCountedObject<::SetSessionDescriptionObserver>(completionHandler));
|
||||
_peerConnection->SetRemoteDescription(sdp.nativeDescription->Clone(), observer);
|
||||
_peerConnection->SetRemoteDescription(sdp.nativeDescription, observer);
|
||||
}
|
||||
|
||||
- (BOOL)setBweMinBitrateBps:(nullable NSNumber *)minBitrateBps
|
||||
|
||||
@ -22,7 +22,8 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
* RTCSessionDescription object. This is needed to pass to the underlying C++
|
||||
* APIs.
|
||||
*/
|
||||
@property(nonatomic, readonly, nullable) webrtc::SessionDescriptionInterface *nativeDescription;
|
||||
@property(nonatomic,
|
||||
readonly) std::unique_ptr<webrtc::SessionDescriptionInterface> nativeDescription;
|
||||
|
||||
/**
|
||||
* Initialize an RTCSessionDescription from a native
|
||||
|
||||
@ -46,13 +46,11 @@
|
||||
|
||||
#pragma mark - Private
|
||||
|
||||
- (webrtc::SessionDescriptionInterface *)nativeDescription {
|
||||
- (std::unique_ptr<webrtc::SessionDescriptionInterface>)nativeDescription {
|
||||
webrtc::SdpParseError error;
|
||||
|
||||
webrtc::SessionDescriptionInterface *description =
|
||||
webrtc::CreateSessionDescription([[self class] stdStringForType:_type],
|
||||
_sdp.stdString,
|
||||
&error);
|
||||
std::unique_ptr<webrtc::SessionDescriptionInterface> description(webrtc::CreateSessionDescription(
|
||||
[[self class] stdStringForType:_type], _sdp.stdString, &error));
|
||||
|
||||
if (!description) {
|
||||
RTCLogError(@"Failed to create session description: %s\nline: %s",
|
||||
|
||||
Reference in New Issue
Block a user