Skip to content

Commit b049a7a

Browse files
authored
Fix ExecuteScript crash (#25878)
1 parent 211cce3 commit b049a7a

File tree

2 files changed

+20
-14
lines changed

2 files changed

+20
-14
lines changed

components/brave_wallet/renderer/js_ethereum_provider.cc

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include "third_party/blink/public/web/web_local_frame.h"
3737
#include "ui/base/l10n/l10n_util.h"
3838
#include "url/origin.h"
39+
3940
namespace {
4041

4142
constexpr char kBraveEthereum[] = "braveEthereum";
@@ -192,13 +193,14 @@ void JSEthereumProvider::Install(bool install_ethereum_provider,
192193
// invocation: Function must be called on an object of type
193194
// JSEthereumProvider" error.
194195
blink::WebLocalFrame* web_frame = render_frame->GetWebFrame();
195-
v8::Local<v8::Proxy> ethereum_proxy;
196-
auto ethereum_proxy_handler_val =
197-
ExecuteScript(web_frame, kEthereumProxyHandlerScript);
196+
v8::Local<v8::Value> ethereum_proxy_handler_val;
197+
if (!ExecuteScript(web_frame, kEthereumProxyHandlerScript)
198+
.ToLocal(&ethereum_proxy_handler_val)) {
199+
return;
200+
}
198201
v8::Local<v8::Object> ethereum_proxy_handler_obj =
199-
ethereum_proxy_handler_val.ToLocalChecked()
200-
->ToObject(context)
201-
.ToLocalChecked();
202+
ethereum_proxy_handler_val->ToObject(context).ToLocalChecked();
203+
v8::Local<v8::Proxy> ethereum_proxy;
202204
if (!v8::Proxy::New(context, provider_object, ethereum_proxy_handler_obj)
203205
.ToLocal(&ethereum_proxy)) {
204206
return;

components/brave_wallet/renderer/js_solana_provider.cc

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -164,13 +164,14 @@ void JSSolanaProvider::Install(bool allow_overwrite_window_solana,
164164
// Create a proxy to the actual JSSolanaProvider object which will be
165165
// exposed via window.braveSolana and window.solana.
166166
blink::WebLocalFrame* web_frame = render_frame->GetWebFrame();
167-
v8::Local<v8::Proxy> solana_proxy;
168-
auto solana_proxy_handler_val =
169-
ExecuteScript(web_frame, kSolanaProxyHandlerScript);
167+
v8::Local<v8::Value> solana_proxy_handler_val;
168+
if (!ExecuteScript(web_frame, kSolanaProxyHandlerScript)
169+
.ToLocal(&solana_proxy_handler_val)) {
170+
return;
171+
}
170172
v8::Local<v8::Object> solana_proxy_handler_obj =
171-
solana_proxy_handler_val.ToLocalChecked()
172-
->ToObject(context)
173-
.ToLocalChecked();
173+
solana_proxy_handler_val->ToObject(context).ToLocalChecked();
174+
v8::Local<v8::Proxy> solana_proxy;
174175
if (!v8::Proxy::New(context, provider_object, solana_proxy_handler_obj)
175176
.ToLocal(&solana_proxy)) {
176177
return;
@@ -630,8 +631,11 @@ void JSSolanaProvider::WalletStandardInit(gin::Arguments* arguments) {
630631
{"(function() {", LoadDataResource(IDR_BRAVE_WALLET_STANDARD_JS),
631632
"return walletStandardBrave; })()"});
632633

633-
v8::Local<v8::Value> wallet_standard =
634-
ExecuteScript(web_frame, wallet_standard_module_str).ToLocalChecked();
634+
v8::Local<v8::Value> wallet_standard;
635+
if (!ExecuteScript(web_frame, wallet_standard_module_str)
636+
.ToLocal(&wallet_standard)) {
637+
return;
638+
}
635639
v8::Local<v8::Value> object;
636640
v8::Isolate* isolate = arguments->isolate();
637641
v8::Local<v8::Context> context = isolate->GetCurrentContext();

0 commit comments

Comments
 (0)