From 5963fddac23fee6025f3dbdb0d60851eb56a33c7 Mon Sep 17 00:00:00 2001 From: Dillon Cower Date: Thu, 7 Feb 2019 16:17:43 -0800 Subject: [PATCH] Pass-by-reference instead of value to initWithNativeEncodedImage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, the use of pass-by-value caused an issue in ObjCVideoDecoder::Decode, where the EncodedImage was being copied upon calling initWithNativeEncodedImage, which then created an NSData using the copy's pointer; then the copy was destroyed, invalidating that pointer. Bug: webrtc:9378 Change-Id: Iac28b890c9902108ffc5ec54a607a99034159153 Reviewed-on: https://webrtc-review.googlesource.com/c/121922 Reviewed-by: Kári Helgason Reviewed-by: Niels Moller Commit-Queue: Rasmus Brandt Cr-Commit-Position: refs/heads/master@{#26598} --- sdk/objc/api/peerconnection/RTCEncodedImage+Private.h | 2 +- sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk/objc/api/peerconnection/RTCEncodedImage+Private.h b/sdk/objc/api/peerconnection/RTCEncodedImage+Private.h index c77a7ad85d..e96ce7bc8e 100644 --- a/sdk/objc/api/peerconnection/RTCEncodedImage+Private.h +++ b/sdk/objc/api/peerconnection/RTCEncodedImage+Private.h @@ -17,7 +17,7 @@ NS_ASSUME_NONNULL_BEGIN /* Interfaces for converting to/from internal C++ formats. */ @interface RTCEncodedImage (Private) -- (instancetype)initWithNativeEncodedImage:(webrtc::EncodedImage)encodedImage; +- (instancetype)initWithNativeEncodedImage:(const webrtc::EncodedImage &)encodedImage; - (webrtc::EncodedImage)nativeEncodedImage; @end diff --git a/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm b/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm index 59962c89f8..669fea2e74 100644 --- a/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm +++ b/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm @@ -14,10 +14,10 @@ @implementation RTCEncodedImage (Private) -- (instancetype)initWithNativeEncodedImage:(webrtc::EncodedImage)encodedImage { +- (instancetype)initWithNativeEncodedImage:(const webrtc::EncodedImage &)encodedImage { if (self = [super init]) { // Wrap the buffer in NSData without copying, do not take ownership. - self.buffer = [NSData dataWithBytesNoCopy:encodedImage.data() + self.buffer = [NSData dataWithBytesNoCopy:encodedImage.mutable_data() length:encodedImage.size() freeWhenDone:NO]; self.encodedWidth = rtc::dchecked_cast(encodedImage._encodedWidth);