summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYagiz Nizipli <yagiz@nizipli.com>2023-03-10 09:09:53 -0500
committerMichaƫl Zasso <targos@protonmail.com>2023-03-14 07:54:11 +0100
commite754277a4414d03dfce3dfb8494645627861437d (patch)
tree2efcc63fd8d32e1fa1e2d27a1163d4679c1c2b10
parent4219c1e893e48a1d42fa2cbe7f3b233b754e8954 (diff)
downloadnode-new-e754277a4414d03dfce3dfb8494645627861437d.tar.gz
url: fix array overrun in node:url::SetArgs()
PR-URL: https://github.com/nodejs/node/pull/47001 Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Darshan Sen <raisinten@gmail.com>
-rw-r--r--src/node_url.cc58
1 files changed, 17 insertions, 41 deletions
diff --git a/src/node_url.cc b/src/node_url.cc
index 014a758b7d..9beb78fc20 100644
--- a/src/node_url.cc
+++ b/src/node_url.cc
@@ -20,7 +20,6 @@ using v8::Local;
using v8::NewStringType;
using v8::Object;
using v8::String;
-using v8::Undefined;
using v8::Value;
Local<String> Utf8String(Isolate* isolate, const std::string& str) {
@@ -46,18 +45,20 @@ enum url_update_action {
kHref = 9,
};
-void SetArgs(Environment* env, Local<Value> argv[10], const ada::result& url) {
+void SetArgs(Environment* env,
+ Local<Value> (*argv)[10],
+ const ada::result& url) {
Isolate* isolate = env->isolate();
- argv[0] = Utf8String(isolate, url->get_href());
- argv[1] = Utf8String(isolate, url->get_origin());
- argv[2] = Utf8String(isolate, url->get_protocol());
- argv[3] = Utf8String(isolate, url->get_hostname());
- argv[4] = Utf8String(isolate, url->get_pathname());
- argv[5] = Utf8String(isolate, url->get_search());
- argv[6] = Utf8String(isolate, url->get_username());
- argv[7] = Utf8String(isolate, url->get_password());
- argv[8] = Utf8String(isolate, url->get_port());
- argv[9] = Utf8String(isolate, url->get_hash());
+ (*argv)[0] = Utf8String(isolate, url->get_href());
+ (*argv)[1] = Utf8String(isolate, url->get_origin());
+ (*argv)[2] = Utf8String(isolate, url->get_protocol());
+ (*argv)[3] = Utf8String(isolate, url->get_hostname());
+ (*argv)[4] = Utf8String(isolate, url->get_pathname());
+ (*argv)[5] = Utf8String(isolate, url->get_search());
+ (*argv)[6] = Utf8String(isolate, url->get_username());
+ (*argv)[7] = Utf8String(isolate, url->get_password());
+ (*argv)[8] = Utf8String(isolate, url->get_port());
+ (*argv)[9] = Utf8String(isolate, url->get_hash());
}
void Parse(const FunctionCallbackInfo<Value>& args) {
@@ -69,7 +70,6 @@ void Parse(const FunctionCallbackInfo<Value>& args) {
Local<Function> success_callback_ = args[2].As<Function>();
Environment* env = Environment::GetCurrent(args);
- Isolate* isolate = env->isolate();
HandleScope handle_scope(env->isolate());
Context::Scope context_scope(env->context());
@@ -89,20 +89,8 @@ void Parse(const FunctionCallbackInfo<Value>& args) {
return args.GetReturnValue().Set(false);
}
- const Local<Value> undef = Undefined(isolate);
- Local<Value> argv[] = {
- undef,
- undef,
- undef,
- undef,
- undef,
- undef,
- undef,
- undef,
- undef,
- undef,
- };
- SetArgs(env, argv, out);
+ Local<Value> argv[10];
+ SetArgs(env, &argv, out);
USE(success_callback_->Call(
env->context(), args.This(), arraysize(argv), argv));
args.GetReturnValue().Set(true);
@@ -235,20 +223,8 @@ void UpdateUrl(const FunctionCallbackInfo<Value>& args) {
}
}
- const Local<Value> undef = Undefined(isolate);
- Local<Value> argv[] = {
- undef,
- undef,
- undef,
- undef,
- undef,
- undef,
- undef,
- undef,
- undef,
- undef,
- };
- SetArgs(env, argv, out);
+ Local<Value> argv[10];
+ SetArgs(env, &argv, out);
USE(success_callback_->Call(
env->context(), args.This(), arraysize(argv), argv));
args.GetReturnValue().Set(result);