Skip to content

Commit

Permalink
url: fix array overrun in node:url::SetArgs()
Browse files Browse the repository at this point in the history
  • Loading branch information
anonrig committed Mar 7, 2023
1 parent 2d9bf91 commit b099ef0
Showing 1 changed file with 17 additions and 40 deletions.
57 changes: 17 additions & 40 deletions src/node_url.cc
Original file line number Diff line number Diff line change
Expand Up @@ -46,18 +46,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) {
Expand All @@ -69,7 +71,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());

Expand All @@ -89,20 +90,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);
Expand Down Expand Up @@ -235,20 +224,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);
Expand Down

0 comments on commit b099ef0

Please sign in to comment.