mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
chore: cherry-pick 6 changes from Release-1-M120 (#40803)
* chore: [26-x-y] cherry-pick 6 changes from Release-1-M120 * 58bc7b8bb840 from libavif * 021598ea43c1 from chromium * 76340163a820 from chromium * f15cfb9371c4 from chromium * 4ca62c7a8b88 from chromium * cbd09b2ca928 from v8 * chore: update patches --------- Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
This commit is contained in:
@@ -148,3 +148,7 @@ cherry-pick-3f45b1af5e41.patch
|
||||
cherry-pick-e13061c50998.patch
|
||||
cherry-pick-5fde415e06f9.patch
|
||||
cherry-pick-8d607d3921b8.patch
|
||||
cherry-pick-021598ea43c1.patch
|
||||
cherry-pick-76340163a820.patch
|
||||
cherry-pick-f15cfb9371c4.patch
|
||||
cherry-pick-4ca62c7a8b88.patch
|
||||
|
||||
69
patches/chromium/cherry-pick-021598ea43c1.patch
Normal file
69
patches/chromium/cherry-pick-021598ea43c1.patch
Normal file
@@ -0,0 +1,69 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Guido Urdaneta <guidou@chromium.org>
|
||||
Date: Mon, 4 Dec 2023 23:00:41 +0000
|
||||
Subject: Drop frames received on the wrong task runner
|
||||
|
||||
It can happen during transfer that a frame is posted from the
|
||||
background media thread to the task runner of the old execution
|
||||
context, which can lead to races and UAF.
|
||||
|
||||
This CL makes underlying sources drop frames received on the
|
||||
wrong task runner to avoid the problem.
|
||||
|
||||
(cherry picked from commit 9d042e0d498356185fe9eb33c53b69fab33d06bf)
|
||||
|
||||
Bug: 1505708
|
||||
Change-Id: I686228d88cb1c48bdf8c0b6bf85edd280a54300a
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5077845
|
||||
Commit-Queue: Guido Urdaneta <guidou@chromium.org>
|
||||
Reviewed-by: Tony Herre <toprice@chromium.org>
|
||||
Cr-Original-Commit-Position: refs/heads/main@{#1231802}
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5082444
|
||||
Commit-Queue: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
|
||||
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
|
||||
Auto-Submit: Guido Urdaneta <guidou@chromium.org>
|
||||
Cr-Commit-Position: refs/branch-heads/6099@{#1370}
|
||||
Cr-Branched-From: e6ee4500f7d6549a9ac1354f8d056da49ef406be-refs/heads/main@{#1217362}
|
||||
|
||||
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_source.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_source.cc
|
||||
index b5a2f71bae81bba6e61d8f303d24a9df874ae885..4c7b0b982e3d314749e39178eb0fca706d11bd85 100644
|
||||
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_source.cc
|
||||
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_audio_underlying_source.cc
|
||||
@@ -58,7 +58,15 @@ void RTCEncodedAudioUnderlyingSource::Trace(Visitor* visitor) const {
|
||||
|
||||
void RTCEncodedAudioUnderlyingSource::OnFrameFromSource(
|
||||
std::unique_ptr<webrtc::TransformableAudioFrameInterface> webrtc_frame) {
|
||||
- DCHECK(task_runner_->BelongsToCurrentThread());
|
||||
+ // It can happen that a frame is posted to the task runner of the old
|
||||
+ // execution context during a stream transfer to a new context.
|
||||
+ // TODO(https://crbug.com/1506631): Make the state updates related to the
|
||||
+ // transfer atomic and turn this into a DCHECK.
|
||||
+ if (!task_runner_->BelongsToCurrentThread()) {
|
||||
+ DVLOG(1) << "Dropped frame posted to incorrect task runner. This can "
|
||||
+ "happen during transfer.";
|
||||
+ return;
|
||||
+ }
|
||||
// If the source is canceled or there are too many queued frames,
|
||||
// drop the new frame.
|
||||
if (!disconnect_callback_ || !GetExecutionContext()) {
|
||||
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_source.cc b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_source.cc
|
||||
index 54ca7d1529b1772200c3691b56e847acc42d086d..8fb1d8460e289cd5e6764271f79dada7f121cb1b 100644
|
||||
--- a/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_source.cc
|
||||
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_encoded_video_underlying_source.cc
|
||||
@@ -58,7 +58,15 @@ void RTCEncodedVideoUnderlyingSource::Trace(Visitor* visitor) const {
|
||||
|
||||
void RTCEncodedVideoUnderlyingSource::OnFrameFromSource(
|
||||
std::unique_ptr<webrtc::TransformableVideoFrameInterface> webrtc_frame) {
|
||||
- DCHECK(task_runner_->BelongsToCurrentThread());
|
||||
+ // It can happen that a frame is posted to the task runner of the old
|
||||
+ // execution context during a stream transfer to a new context.
|
||||
+ // TODO(https://crbug.com/1506631): Make the state updates related to the
|
||||
+ // transfer atomic and turn this into a DCHECK.
|
||||
+ if (!task_runner_->BelongsToCurrentThread()) {
|
||||
+ DVLOG(1) << "Dropped frame posted to incorrect task runner. This can "
|
||||
+ "happen during transfer.";
|
||||
+ return;
|
||||
+ }
|
||||
// If the source is canceled or there are too many queued frames,
|
||||
// drop the new frame.
|
||||
if (!disconnect_callback_ || !GetExecutionContext()) {
|
||||
43
patches/chromium/cherry-pick-4ca62c7a8b88.patch
Normal file
43
patches/chromium/cherry-pick-4ca62c7a8b88.patch
Normal file
@@ -0,0 +1,43 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Vasiliy Telezhnikov <vasilyt@chromium.org>
|
||||
Date: Thu, 7 Dec 2023 16:56:57 +0000
|
||||
Subject: Check for slugs count before deserializing Slugs in DrawSlugOp
|
||||
|
||||
Count is part of serialized data and while we never serialize values
|
||||
less then 1, it can be any value when coming over IPC, we should check
|
||||
that it's positive before substacting one.
|
||||
|
||||
(cherry picked from commit 0527e0d5b08a13d63f4f1eeefa1b86ecfd0cb63b)
|
||||
|
||||
Bug: 1506726
|
||||
Change-Id: I244f50a682f2e852b22ba88f1e9cddddb0fdfcb9
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5078779
|
||||
Reviewed-by: Peng Huang <penghuang@chromium.org>
|
||||
Commit-Queue: Vasiliy Telezhnikov <vasilyt@chromium.org>
|
||||
Cr-Original-Commit-Position: refs/heads/main@{#1232013}
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5096809
|
||||
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
|
||||
Cr-Commit-Position: refs/branch-heads/6099@{#1428}
|
||||
Cr-Branched-From: e6ee4500f7d6549a9ac1354f8d056da49ef406be-refs/heads/main@{#1217362}
|
||||
|
||||
diff --git a/cc/paint/paint_op.cc b/cc/paint/paint_op.cc
|
||||
index ea103192096b1316f2a9a31cf3478e6dafe66788..5ff86b59f7b7b27e21bfdb95da637fed9cee0420 100644
|
||||
--- a/cc/paint/paint_op.cc
|
||||
+++ b/cc/paint/paint_op.cc
|
||||
@@ -974,10 +974,12 @@ PaintOp* DrawSlugOp::Deserialize(PaintOpReader& reader, void* output) {
|
||||
reader.Read(&op->flags);
|
||||
unsigned int count = 0;
|
||||
reader.Read(&count);
|
||||
- reader.Read(&op->slug);
|
||||
- op->extra_slugs.resize(count - 1);
|
||||
- for (auto& extra_slug : op->extra_slugs) {
|
||||
- reader.Read(&extra_slug);
|
||||
+ if (count > 0) {
|
||||
+ reader.Read(&op->slug);
|
||||
+ op->extra_slugs.resize(count - 1);
|
||||
+ for (auto& extra_slug : op->extra_slugs) {
|
||||
+ reader.Read(&extra_slug);
|
||||
+ }
|
||||
}
|
||||
return op;
|
||||
}
|
||||
37
patches/chromium/cherry-pick-76340163a820.patch
Normal file
37
patches/chromium/cherry-pick-76340163a820.patch
Normal file
@@ -0,0 +1,37 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Semel <paulsemel@chromium.org>
|
||||
Date: Wed, 6 Dec 2023 15:52:56 +0000
|
||||
Subject: ImageBitmapFactory: fix empty context dcheck
|
||||
|
||||
Approved by:
|
||||
https://bugs.chromium.org/p/chromium/issues/detail?id=1502102#c34
|
||||
|
||||
(cherry picked from commit c4d2f15b8f97076c8fd0f9aa5814b94db698b75c)
|
||||
|
||||
Fixed: 1502102
|
||||
Change-Id: Ib42d2897d62136ae835561bcf56884b5624060a5
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5071252
|
||||
Commit-Queue: Paul Semel <paulsemel@chromium.org>
|
||||
Reviewed-by: Jean-Philippe Gravel <jpgravel@chromium.org>
|
||||
Cr-Original-Commit-Position: refs/heads/main@{#1230617}
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5088373
|
||||
Auto-Submit: Arthur Sonzogni <arthursonzogni@google.com>
|
||||
Reviewed-by: Paul Semel <paulsemel@chromium.org>
|
||||
Cr-Commit-Position: refs/branch-heads/6099@{#1416}
|
||||
Cr-Branched-From: e6ee4500f7d6549a9ac1354f8d056da49ef406be-refs/heads/main@{#1217362}
|
||||
|
||||
diff --git a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc
|
||||
index 20d95536a945c67b9aba082c0ad1ff4aa46c240d..5028d3744619a14e23bba4006bf958478b5b53f8 100644
|
||||
--- a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc
|
||||
+++ b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc
|
||||
@@ -155,7 +155,9 @@ ScriptPromise ImageBitmapFactories::CreateImageBitmapFromBlob(
|
||||
ImageBitmapSource* bitmap_source,
|
||||
absl::optional<gfx::Rect> crop_rect,
|
||||
const ImageBitmapOptions* options) {
|
||||
- DCHECK(script_state->ContextIsValid());
|
||||
+ if (!script_state->ContextIsValid()) {
|
||||
+ return ScriptPromise();
|
||||
+ }
|
||||
|
||||
// imageOrientation: 'from-image' will be used to replace imageOrientation:
|
||||
// 'none'. Adding a deprecation warning when 'none' is called in
|
||||
181
patches/chromium/cherry-pick-f15cfb9371c4.patch
Normal file
181
patches/chromium/cherry-pick-f15cfb9371c4.patch
Normal file
@@ -0,0 +1,181 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Kai Ninomiya <kainino@chromium.org>
|
||||
Date: Thu, 7 Dec 2023 14:31:32 +0000
|
||||
Subject: Fix reinit order in
|
||||
ContextProviderCommandBuffer::BindToCurrentSequence
|
||||
|
||||
See comments for explanation.
|
||||
|
||||
(cherry picked from commit 7d8400ceb56db5fd97249f787251fe8b3928e6fd)
|
||||
|
||||
Bug: 1505632
|
||||
Change-Id: I0f43821a9708af91303048332e9fae5e100deee5
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5069480
|
||||
Reviewed-by: Saifuddin Hitawala <hitawala@chromium.org>
|
||||
Commit-Queue: Kai Ninomiya <kainino@chromium.org>
|
||||
Reviewed-by: Brendon Tiszka <tiszka@chromium.org>
|
||||
Cr-Original-Commit-Position: refs/heads/main@{#1230735}
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5095795
|
||||
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
|
||||
Commit-Queue: Saifuddin Hitawala <hitawala@chromium.org>
|
||||
Auto-Submit: Kai Ninomiya <kainino@chromium.org>
|
||||
Cr-Commit-Position: refs/branch-heads/6099@{#1424}
|
||||
Cr-Branched-From: e6ee4500f7d6549a9ac1354f8d056da49ef406be-refs/heads/main@{#1217362}
|
||||
|
||||
diff --git a/services/viz/public/cpp/gpu/context_provider_command_buffer.cc b/services/viz/public/cpp/gpu/context_provider_command_buffer.cc
|
||||
index 5f0966ef839fae01ddadff64b9bde819dbfc7141..2bd94a0c94cd1aafe6ad21a8a7f2cb1f3afd8110 100644
|
||||
--- a/services/viz/public/cpp/gpu/context_provider_command_buffer.cc
|
||||
+++ b/services/viz/public/cpp/gpu/context_provider_command_buffer.cc
|
||||
@@ -172,13 +172,13 @@ gpu::ContextResult ContextProviderCommandBuffer::BindToCurrentSequence() {
|
||||
}
|
||||
|
||||
// The transfer buffer is used to serialize Dawn commands
|
||||
- transfer_buffer_ =
|
||||
+ auto transfer_buffer =
|
||||
std::make_unique<gpu::TransferBuffer>(webgpu_helper.get());
|
||||
|
||||
// The WebGPUImplementation exposes the WebGPUInterface, as well as the
|
||||
// gpu::ContextSupport interface.
|
||||
auto webgpu_impl = std::make_unique<gpu::webgpu::WebGPUImplementation>(
|
||||
- webgpu_helper.get(), transfer_buffer_.get(), command_buffer_.get());
|
||||
+ webgpu_helper.get(), transfer_buffer.get(), command_buffer_.get());
|
||||
bind_result_ = webgpu_impl->Initialize(memory_limits_);
|
||||
if (bind_result_ != gpu::ContextResult::kSuccess) {
|
||||
DLOG(ERROR) << "Failed to initialize WebGPUImplementation.";
|
||||
@@ -190,8 +190,11 @@ gpu::ContextResult ContextProviderCommandBuffer::BindToCurrentSequence() {
|
||||
std::string unique_context_name =
|
||||
base::StringPrintf("%s-%p", type_name.c_str(), webgpu_impl.get());
|
||||
|
||||
+ // IMPORTANT: These hold raw_ptrs to each other, so must be set together.
|
||||
+ // See note in the header (and keep it up to date if things change).
|
||||
impl_ = webgpu_impl.get();
|
||||
webgpu_interface_ = std::move(webgpu_impl);
|
||||
+ transfer_buffer_ = std::move(transfer_buffer);
|
||||
helper_ = std::move(webgpu_helper);
|
||||
} else if (attributes_.enable_raster_interface &&
|
||||
!attributes_.enable_gles2_interface &&
|
||||
@@ -209,14 +212,14 @@ gpu::ContextResult ContextProviderCommandBuffer::BindToCurrentSequence() {
|
||||
}
|
||||
// The transfer buffer is used to copy resources between the client
|
||||
// process and the GPU process.
|
||||
- transfer_buffer_ =
|
||||
+ auto transfer_buffer =
|
||||
std::make_unique<gpu::TransferBuffer>(raster_helper.get());
|
||||
|
||||
// The RasterImplementation exposes the RasterInterface, as well as the
|
||||
// gpu::ContextSupport interface.
|
||||
DCHECK(channel_);
|
||||
auto raster_impl = std::make_unique<gpu::raster::RasterImplementation>(
|
||||
- raster_helper.get(), transfer_buffer_.get(),
|
||||
+ raster_helper.get(), transfer_buffer.get(),
|
||||
attributes_.bind_generates_resource,
|
||||
attributes_.lose_context_when_out_of_memory, command_buffer_.get(),
|
||||
channel_->image_decode_accelerator_proxy());
|
||||
@@ -233,8 +236,11 @@ gpu::ContextResult ContextProviderCommandBuffer::BindToCurrentSequence() {
|
||||
raster_impl->TraceBeginCHROMIUM("gpu_toplevel",
|
||||
unique_context_name.c_str());
|
||||
|
||||
+ // IMPORTANT: These hold raw_ptrs to each other, so must be set together.
|
||||
+ // See note in the header (and keep it up to date if things change).
|
||||
impl_ = raster_impl.get();
|
||||
raster_interface_ = std::move(raster_impl);
|
||||
+ transfer_buffer_ = std::move(transfer_buffer);
|
||||
helper_ = std::move(raster_helper);
|
||||
} else {
|
||||
// The GLES2 helper writes the command buffer protocol.
|
||||
@@ -249,7 +255,7 @@ gpu::ContextResult ContextProviderCommandBuffer::BindToCurrentSequence() {
|
||||
|
||||
// The transfer buffer is used to copy resources between the client
|
||||
// process and the GPU process.
|
||||
- transfer_buffer_ =
|
||||
+ auto transfer_buffer =
|
||||
std::make_unique<gpu::TransferBuffer>(gles2_helper.get());
|
||||
|
||||
// The GLES2Implementation exposes the OpenGLES2 API, as well as the
|
||||
@@ -262,13 +268,13 @@ gpu::ContextResult ContextProviderCommandBuffer::BindToCurrentSequence() {
|
||||
// we only use it if grcontext_support was requested.
|
||||
gles2_impl = std::make_unique<
|
||||
skia_bindings::GLES2ImplementationWithGrContextSupport>(
|
||||
- gles2_helper.get(), /*share_group=*/nullptr, transfer_buffer_.get(),
|
||||
+ gles2_helper.get(), /*share_group=*/nullptr, transfer_buffer.get(),
|
||||
attributes_.bind_generates_resource,
|
||||
attributes_.lose_context_when_out_of_memory,
|
||||
support_client_side_arrays, command_buffer_.get());
|
||||
} else {
|
||||
gles2_impl = std::make_unique<gpu::gles2::GLES2Implementation>(
|
||||
- gles2_helper.get(), /*share_group=*/nullptr, transfer_buffer_.get(),
|
||||
+ gles2_helper.get(), /*share_group=*/nullptr, transfer_buffer.get(),
|
||||
attributes_.bind_generates_resource,
|
||||
attributes_.lose_context_when_out_of_memory,
|
||||
support_client_side_arrays, command_buffer_.get());
|
||||
@@ -279,8 +285,11 @@ gpu::ContextResult ContextProviderCommandBuffer::BindToCurrentSequence() {
|
||||
return bind_result_;
|
||||
}
|
||||
|
||||
+ // IMPORTANT: These hold raw_ptrs to each other, so must be set together.
|
||||
+ // See note in the header (and keep it up to date if things change).
|
||||
impl_ = gles2_impl.get();
|
||||
gles2_impl_ = std::move(gles2_impl);
|
||||
+ transfer_buffer_ = std::move(transfer_buffer);
|
||||
helper_ = std::move(gles2_helper);
|
||||
}
|
||||
|
||||
@@ -314,6 +323,7 @@ gpu::ContextResult ContextProviderCommandBuffer::BindToCurrentSequence() {
|
||||
switches::kEnableGpuClientTracing)) {
|
||||
// This wraps the real GLES2Implementation and we should always use this
|
||||
// instead when it's present.
|
||||
+ // IMPORTANT: This holds a raw_ptr to gles2_impl_.
|
||||
trace_impl_ = std::make_unique<gpu::gles2::GLES2TraceImplementation>(
|
||||
gles2_impl_.get());
|
||||
gl = trace_impl_.get();
|
||||
diff --git a/services/viz/public/cpp/gpu/context_provider_command_buffer.h b/services/viz/public/cpp/gpu/context_provider_command_buffer.h
|
||||
index 93fd2dbd47fc8aca19ac8baffe62911cdc9efb6c..78aaa2b759e350a7a8ed58273cf910ab91c235ea 100644
|
||||
--- a/services/viz/public/cpp/gpu/context_provider_command_buffer.h
|
||||
+++ b/services/viz/public/cpp/gpu/context_provider_command_buffer.h
|
||||
@@ -159,19 +159,42 @@ class ContextProviderCommandBuffer
|
||||
// associated shared images are destroyed.
|
||||
std::unique_ptr<gpu::ClientSharedImageInterface> shared_image_interface_;
|
||||
|
||||
- base::Lock context_lock_; // Referenced by command_buffer_.
|
||||
+ //////////////////////////////////////////////////////////////////////////////
|
||||
+ // IMPORTANT NOTE: All of the objects in this block are part of a complex //
|
||||
+ // graph of raw pointers (holder or pointee of various raw_ptrs). They are //
|
||||
+ // defined in topological order: only later items point to earlier items. //
|
||||
+ // - When writing any member, always ensure its pointers to earlier members
|
||||
+ // are guaranteed to stay alive.
|
||||
+ // - When clearing OR overwriting any member, always ensure objects that
|
||||
+ // point to it have already been cleared.
|
||||
+ // - The topological order of definitions guarantees that the
|
||||
+ // destructors will be called in the correct order (bottom to top).
|
||||
+ // - When overwriting multiple members, similarly do so in reverse order.
|
||||
+ //
|
||||
+ // Please note these comments are likely not to stay perfectly up-to-date.
|
||||
+
|
||||
+ base::Lock context_lock_;
|
||||
+ // Points to the context_lock_ field of `this`.
|
||||
std::unique_ptr<gpu::CommandBufferProxyImpl> command_buffer_;
|
||||
+
|
||||
+ // Points to command_buffer_.
|
||||
std::unique_ptr<gpu::CommandBufferHelper> helper_;
|
||||
+ // Points to helper_.
|
||||
std::unique_ptr<gpu::TransferBuffer> transfer_buffer_;
|
||||
|
||||
+ // Points to transfer_buffer_, helper_, and command_buffer_.
|
||||
std::unique_ptr<gpu::gles2::GLES2Implementation> gles2_impl_;
|
||||
+ // Points to gles2_impl_.
|
||||
std::unique_ptr<gpu::gles2::GLES2TraceImplementation> trace_impl_;
|
||||
+ // Points to transfer_buffer_, helper_, and command_buffer_.
|
||||
std::unique_ptr<gpu::raster::RasterInterface> raster_interface_;
|
||||
+ // Points to transfer_buffer_, helper_, and command_buffer_.
|
||||
std::unique_ptr<gpu::webgpu::WebGPUInterface> webgpu_interface_;
|
||||
+ // This is an alias for gles2_impl_, raster_interface_, or webgpu_interface_.
|
||||
+ raw_ptr<gpu::ImplementationBase> impl_ = nullptr;
|
||||
|
||||
- // Owned by one of gles2_impl_, raster_interface_, or webgpu_interface_. It
|
||||
- // must be declared last and cleared first.
|
||||
- raw_ptr<gpu::ImplementationBase> impl_;
|
||||
+ // END IMPORTANT NOTE //
|
||||
+ //////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
std::unique_ptr<skia_bindings::GrContextForGLES2Interface> gr_context_;
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
remove_potential_out_of_bound_access_to_alphaitemindices.patch
|
||||
do_not_store_potentially_invalid_pointers.patch
|
||||
do_not_store_colorproperties_until_alpha_item_is_found.patch
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Vignesh Venkatasubramanian <vigneshv@google.com>
|
||||
Date: Tue, 28 Nov 2023 08:44:22 -0800
|
||||
Subject: Do not store colorproperties until alpha item is found
|
||||
|
||||
colorProperties could be pointing to a dangling pointer if
|
||||
findAlphaItem() resizes the meta.items array.
|
||||
|
||||
Manual cherry-pick of PR #1808 into the chromium-m118 branch.
|
||||
|
||||
diff --git a/src/read.c b/src/read.c
|
||||
index 73aa68eb0ad377e95038280fea1523dd909b6e87..ab490f6ddbd983321af8fae94cdf34dd32058160 100644
|
||||
--- a/src/read.c
|
||||
+++ b/src/read.c
|
||||
@@ -3918,7 +3918,6 @@ avifResult avifDecoderReset(avifDecoder * decoder)
|
||||
avifDiagnosticsPrintf(&decoder->diag, "Primary item not found");
|
||||
return AVIF_RESULT_MISSING_IMAGE_ITEM;
|
||||
}
|
||||
- colorProperties = &colorItem->properties;
|
||||
if (!memcmp(colorItem->type, "grid", 4)) {
|
||||
avifROData readData;
|
||||
AVIF_CHECKRES(avifDecoderItemRead(colorItem, decoder->io, &readData, 0, 0, data->diag));
|
||||
@@ -3965,6 +3964,8 @@ avifResult avifDecoderReset(avifDecoder * decoder)
|
||||
}
|
||||
}
|
||||
|
||||
+ colorProperties = &colorItem->properties;
|
||||
+
|
||||
// Find Exif and/or XMP metadata, if any
|
||||
AVIF_CHECKRES(avifDecoderFindMetadata(decoder, data->meta, decoder->image, colorItem->id));
|
||||
|
||||
@@ -4,3 +4,4 @@ fix_build_deprecated_attribute_for_older_msvc_versions.patch
|
||||
fix_disable_implies_dcheck_for_node_stream_array_buffers.patch
|
||||
chore_allow_customizing_microtask_policy_per_context.patch
|
||||
cherry-pick-57d372c3e399.patch
|
||||
merged_promises_async_stack_traces_fix_the_case_when_the_closure.patch
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Marja=20H=C3=B6ltt=C3=A4?= <marja@chromium.org>
|
||||
Date: Tue, 14 Nov 2023 14:45:27 +0100
|
||||
Subject: Merged: [promises, async stack traces] Fix the case when the closure
|
||||
has run
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
We were using the closure pointing to NativeContext as a marker that the
|
||||
closure has run, but async stack trace code was confused about it.
|
||||
|
||||
(cherry picked from commit bde3d360097607f36cd1d17cbe8412b84eae0a7f)
|
||||
|
||||
Bug: chromium:1501326
|
||||
Change-Id: I30d438f3b2e3fdd7562ea9a79dde4561ce9b0083
|
||||
Cr-Original-Commit-Position: refs/heads/main@{#90949}
|
||||
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/5110982
|
||||
Commit-Queue: Marja Hölttä <marja@chromium.org>
|
||||
Reviewed-by: Shu-yu Guo <syg@chromium.org>
|
||||
Reviewed-by: Igor Sheludko <ishell@chromium.org>
|
||||
Auto-Submit: Marja Hölttä <marja@chromium.org>
|
||||
Cr-Commit-Position: refs/branch-heads/12.0@{#18}
|
||||
Cr-Branched-From: ed7b4caf1fb8184ad9e24346c84424055d4d430a-refs/heads/12.0.267@{#1}
|
||||
Cr-Branched-From: 210e75b19db4352c9b78dce0bae11c2dc3077df4-refs/heads/main@{#90651}
|
||||
|
||||
diff --git a/src/execution/isolate.cc b/src/execution/isolate.cc
|
||||
index 3db3d7ed372b722de1b24a39093ddefc45d6963c..5942abb480b69935d14d1c6ef06d1f4e954275a2 100644
|
||||
--- a/src/execution/isolate.cc
|
||||
+++ b/src/execution/isolate.cc
|
||||
@@ -1013,7 +1013,13 @@ void CaptureAsyncStackTrace(Isolate* isolate, Handle<JSPromise> promise,
|
||||
isolate);
|
||||
builder->AppendPromiseCombinatorFrame(function, combinator);
|
||||
|
||||
- // Now peak into the Promise.all() resolve element context to
|
||||
+ if (context->IsNativeContext()) {
|
||||
+ // NativeContext is used as a marker that the closure was already
|
||||
+ // called. We can't access the reject element context any more.
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ // Now peek into the Promise.all() resolve element context to
|
||||
// find the promise capability that's being resolved when all
|
||||
// the concurrent promises resolve.
|
||||
int const index =
|
||||
@@ -1032,7 +1038,13 @@ void CaptureAsyncStackTrace(Isolate* isolate, Handle<JSPromise> promise,
|
||||
context->native_context().promise_all_settled(), isolate);
|
||||
builder->AppendPromiseCombinatorFrame(function, combinator);
|
||||
|
||||
- // Now peak into the Promise.allSettled() resolve element context to
|
||||
+ if (context->IsNativeContext()) {
|
||||
+ // NativeContext is used as a marker that the closure was already
|
||||
+ // called. We can't access the reject element context any more.
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ // Now peek into the Promise.allSettled() resolve element context to
|
||||
// find the promise capability that's being resolved when all
|
||||
// the concurrent promises resolve.
|
||||
int const index =
|
||||
@@ -1050,7 +1062,13 @@ void CaptureAsyncStackTrace(Isolate* isolate, Handle<JSPromise> promise,
|
||||
isolate);
|
||||
builder->AppendPromiseCombinatorFrame(function, combinator);
|
||||
|
||||
- // Now peak into the Promise.any() reject element context to
|
||||
+ if (context->IsNativeContext()) {
|
||||
+ // NativeContext is used as a marker that the closure was already
|
||||
+ // called. We can't access the reject element context any more.
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ // Now peek into the Promise.any() reject element context to
|
||||
// find the promise capability that's being resolved when any of
|
||||
// the concurrent promises resolve.
|
||||
int const index = PromiseBuiltins::kPromiseAnyRejectElementCapabilitySlot;
|
||||
Reference in New Issue
Block a user