From 9fea310a625c8922bc1f6c3cafe175a73ca7e9c4 Mon Sep 17 00:00:00 2001 From: Austin Orion Date: Thu, 15 Apr 2021 09:56:07 -0700 Subject: [PATCH] Fix crash in WindowCapturerWinGdi::CaptureFrame. A couple crashes have been reported in Chromium due to us dereferencing |result.frame| which can be a nullptr. This bug tracks the addition of new test cases which will help us avoid issues like this in the future: https://bugs.chromium.org/p/webrtc/issues/detail?id=12682 Bug: chromium:1199257 Change-Id: I720dd6ceb38938dc392f0924acf2cac287bfcffc Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/215340 Reviewed-by: Jamie Walch Commit-Queue: Austin Orion Cr-Commit-Position: refs/heads/master@{#33746} --- .../win/window_capturer_win_gdi.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/modules/desktop_capture/win/window_capturer_win_gdi.cc b/modules/desktop_capture/win/window_capturer_win_gdi.cc index 5f7c7885ca..277c02e7c5 100644 --- a/modules/desktop_capture/win/window_capturer_win_gdi.cc +++ b/modules/desktop_capture/win/window_capturer_win_gdi.cc @@ -158,12 +158,16 @@ void WindowCapturerWinGdi::CaptureFrame() { CaptureResults results = CaptureFrame(/*capture_owned_windows*/ true); - int capture_time_ms = (rtc::TimeNanos() - capture_start_time_nanos) / - rtc::kNumNanosecsPerMillisec; - RTC_HISTOGRAM_COUNTS_1000( - "WebRTC.DesktopCapture.Win.WindowGdiCapturerFrameTime", capture_time_ms); - results.frame->set_capture_time_ms(capture_time_ms); - results.frame->set_capturer_id(DesktopCapturerId::kWindowCapturerWinGdi); + if (results.frame) { + int capture_time_ms = (rtc::TimeNanos() - capture_start_time_nanos) / + rtc::kNumNanosecsPerMillisec; + RTC_HISTOGRAM_COUNTS_1000( + "WebRTC.DesktopCapture.Win.WindowGdiCapturerFrameTime", + capture_time_ms); + results.frame->set_capture_time_ms(capture_time_ms); + results.frame->set_capturer_id(DesktopCapturerId::kWindowCapturerWinGdi); + } + callback_->OnCaptureResult(results.result, std::move(results.frame)); }