From 6231fb6dac8276581e4ed0f7cb70712d6b6711aa Mon Sep 17 00:00:00 2001 From: "pbos@webrtc.org" Date: Fri, 20 Mar 2015 07:33:02 +0000 Subject: [PATCH] Prevent crashes when copying a zero-size frame. BUG=4451 R=magjed@webrtc.org, tommi@webrtc.org Review URL: https://webrtc-codereview.appspot.com/44749004 Cr-Commit-Position: refs/heads/master@{#8802} git-svn-id: http://webrtc.googlecode.com/svn/trunk@8802 4adac7df-926f-26a2-2b94-8c16560cd09d --- webrtc/common_video/i420_video_frame.cc | 17 ++++++++--------- .../common_video/i420_video_frame_unittest.cc | 6 ++++++ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/webrtc/common_video/i420_video_frame.cc b/webrtc/common_video/i420_video_frame.cc index 995565cd3b..a630541a66 100644 --- a/webrtc/common_video/i420_video_frame.cc +++ b/webrtc/common_video/i420_video_frame.cc @@ -119,18 +119,17 @@ int I420VideoFrame::CreateFrame(const uint8_t* buffer_y, } int I420VideoFrame::CopyFrame(const I420VideoFrame& videoFrame) { - if (videoFrame.native_handle()) { + if (videoFrame.IsZeroSize()) { + video_frame_buffer_ = nullptr; + } else if (videoFrame.native_handle()) { video_frame_buffer_ = videoFrame.video_frame_buffer(); } else { - int ret = CreateFrame( - videoFrame.buffer(kYPlane), - videoFrame.buffer(kUPlane), - videoFrame.buffer(kVPlane), - videoFrame.width(), videoFrame.height(), videoFrame.stride(kYPlane), - videoFrame.stride(kUPlane), videoFrame.stride(kVPlane)); - if (ret < 0) - return ret; + CreateFrame(videoFrame.buffer(kYPlane), videoFrame.buffer(kUPlane), + videoFrame.buffer(kVPlane), videoFrame.width(), + videoFrame.height(), videoFrame.stride(kYPlane), + videoFrame.stride(kUPlane), videoFrame.stride(kVPlane)); } + timestamp_ = videoFrame.timestamp_; ntp_time_ms_ = videoFrame.ntp_time_ms_; render_time_ms_ = videoFrame.render_time_ms_; diff --git a/webrtc/common_video/i420_video_frame_unittest.cc b/webrtc/common_video/i420_video_frame_unittest.cc index 2208a871c5..44d5060829 100644 --- a/webrtc/common_video/i420_video_frame_unittest.cc +++ b/webrtc/common_video/i420_video_frame_unittest.cc @@ -46,6 +46,12 @@ TEST(TestI420VideoFrame, InitialValues) { EXPECT_EQ(kVideoRotation_0, frame.rotation()); } +TEST(TestI420VideoFrame, CopiesInitialFrameWithoutCrashing) { + I420VideoFrame frame; + I420VideoFrame frame2; + frame2.CopyFrame(frame); +} + TEST(TestI420VideoFrame, WidthHeightValues) { I420VideoFrame frame; const int valid_value = 10;