From b434d3ab4f18d3ef25027c248443883442f48ada Mon Sep 17 00:00:00 2001 From: Pedro Pontes Date: Thu, 9 Apr 2020 01:05:51 +0200 Subject: [PATCH] fix: backport b52f7fb5933a from WebRTC. [DirectX] Fix vector allocation for raw data handling. std::vector::reserve has the effect to reserve space in memory but does not affect the result of size(), which keeps on returning 0. If size is 0, however, data() might either return null or not [1]. This CL fixes the use of reserve() in favour of resize() which effectively allocates the memory in the vector and updates its size. This way size() returns a value bigger than 0 and data() returns a valid pointer. [1] https://en.cppreference.com/w/cpp/container/vector/data Fixed: chromium:1059764 Change-Id: Ida3dbe643710c6895f09b9da87b0075b7d7b28df Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/170470 Reviewed-by: Jamie Walch Commit-Queue: Armando Miraglia Cr-Commit-Position: refs/heads/master@{#30836} --- patches/config.json | 4 ++- patches/webrtc/.patches | 1 + ...tor_allocation_for_raw_data_handling.patch | 36 +++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 patches/webrtc/.patches create mode 100644 patches/webrtc/fix_vector_allocation_for_raw_data_handling.patch diff --git a/patches/config.json b/patches/config.json index 295dc79c75c98..c72e92cf9b1d6 100644 --- a/patches/config.json +++ b/patches/config.json @@ -13,5 +13,7 @@ "src/electron/patches/v8": "src/v8", - "src/electron/patches/node": "src/third_party/electron_node" + "src/electron/patches/node": "src/third_party/electron_node", + + "src/electron/patches/webrtc": "src/third_party/webrtc" } diff --git a/patches/webrtc/.patches b/patches/webrtc/.patches new file mode 100644 index 0000000000000..0e9e51f89b9c3 --- /dev/null +++ b/patches/webrtc/.patches @@ -0,0 +1 @@ +fix_vector_allocation_for_raw_data_handling.patch diff --git a/patches/webrtc/fix_vector_allocation_for_raw_data_handling.patch b/patches/webrtc/fix_vector_allocation_for_raw_data_handling.patch new file mode 100644 index 0000000000000..72e1d99a310ae --- /dev/null +++ b/patches/webrtc/fix_vector_allocation_for_raw_data_handling.patch @@ -0,0 +1,36 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Armando Miraglia +Date: Mon, 16 Mar 2020 13:10:26 +0100 +Subject: Fix vector allocation for raw data handling. + +std::vector::reserve has the effect to reserve space in memory but does +not affect the result of size(), which keeps on returning 0. If size is +0, however, data() might either return null or not [1]. + +This CL fixes the use of reserve() in favour of resize() which +effectively allocates the memory in the vector and updates its size. +This way size() returns a value bigger than 0 and data() returns a valid +pointer. + +[1] https://en.cppreference.com/w/cpp/container/vector/data + +Fixed: chromium:1059764 +Change-Id: Ida3dbe643710c6895f09b9da87b0075b7d7b28df +Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/170470 +Reviewed-by: Jamie Walch +Commit-Queue: Armando Miraglia +Cr-Commit-Position: refs/heads/master@{#30836} + +diff --git a/modules/desktop_capture/win/dxgi_output_duplicator.cc b/modules/desktop_capture/win/dxgi_output_duplicator.cc +index db7ba251c230a2bf4481ee70a1533984a9f7159b..2d56b9af36ef49b3f149141af3dd89fb8821c001 100644 +--- a/modules/desktop_capture/win/dxgi_output_duplicator.cc ++++ b/modules/desktop_capture/win/dxgi_output_duplicator.cc +@@ -275,7 +275,7 @@ bool DxgiOutputDuplicator::DoDetectUpdatedRegion( + + if (metadata_.capacity() < frame_info.TotalMetadataBufferSize) { + metadata_.clear(); // Avoid data copy +- metadata_.reserve(frame_info.TotalMetadataBufferSize); ++ metadata_.resize(frame_info.TotalMetadataBufferSize); + } + + UINT buff_size = 0;