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
This commit is contained in:
pbos@webrtc.org 2015-03-20 07:33:02 +00:00
parent 6069032ebb
commit 6231fb6dac
2 changed files with 14 additions and 9 deletions

View File

@ -119,18 +119,17 @@ int I420VideoFrame::CreateFrame(const uint8_t* buffer_y,
} }
int I420VideoFrame::CopyFrame(const I420VideoFrame& videoFrame) { 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(); video_frame_buffer_ = videoFrame.video_frame_buffer();
} else { } else {
int ret = CreateFrame( CreateFrame(videoFrame.buffer(kYPlane), videoFrame.buffer(kUPlane),
videoFrame.buffer(kYPlane), videoFrame.buffer(kVPlane), videoFrame.width(),
videoFrame.buffer(kUPlane), videoFrame.height(), videoFrame.stride(kYPlane),
videoFrame.buffer(kVPlane),
videoFrame.width(), videoFrame.height(), videoFrame.stride(kYPlane),
videoFrame.stride(kUPlane), videoFrame.stride(kVPlane)); videoFrame.stride(kUPlane), videoFrame.stride(kVPlane));
if (ret < 0)
return ret;
} }
timestamp_ = videoFrame.timestamp_; timestamp_ = videoFrame.timestamp_;
ntp_time_ms_ = videoFrame.ntp_time_ms_; ntp_time_ms_ = videoFrame.ntp_time_ms_;
render_time_ms_ = videoFrame.render_time_ms_; render_time_ms_ = videoFrame.render_time_ms_;

View File

@ -46,6 +46,12 @@ TEST(TestI420VideoFrame, InitialValues) {
EXPECT_EQ(kVideoRotation_0, frame.rotation()); EXPECT_EQ(kVideoRotation_0, frame.rotation());
} }
TEST(TestI420VideoFrame, CopiesInitialFrameWithoutCrashing) {
I420VideoFrame frame;
I420VideoFrame frame2;
frame2.CopyFrame(frame);
}
TEST(TestI420VideoFrame, WidthHeightValues) { TEST(TestI420VideoFrame, WidthHeightValues) {
I420VideoFrame frame; I420VideoFrame frame;
const int valid_value = 10; const int valid_value = 10;