Skip to content

Commit b099ef0

Browse files
committed
url: fix array overrun in node:url::SetArgs()
1 parent 2d9bf91 commit b099ef0

1 file changed

Lines changed: 17 additions & 40 deletions

File tree

src/node_url.cc

Lines changed: 17 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,20 @@ enum url_update_action {
4646
kHref = 9,
4747
};
4848

49-
void SetArgs(Environment* env, Local<Value> argv[10], const ada::result& url) {
49+
void SetArgs(Environment* env,
50+
Local<Value> (*argv)[10],
51+
const ada::result& url) {
5052
Isolate* isolate = env->isolate();
51-
argv[0] = Utf8String(isolate, url->get_href());
52-
argv[1] = Utf8String(isolate, url->get_origin());
53-
argv[2] = Utf8String(isolate, url->get_protocol());
54-
argv[3] = Utf8String(isolate, url->get_hostname());
55-
argv[4] = Utf8String(isolate, url->get_pathname());
56-
argv[5] = Utf8String(isolate, url->get_search());
57-
argv[6] = Utf8String(isolate, url->get_username());
58-
argv[7] = Utf8String(isolate, url->get_password());
59-
argv[8] = Utf8String(isolate, url->get_port());
60-
argv[9] = Utf8String(isolate, url->get_hash());
53+
(*argv)[0] = Utf8String(isolate, url->get_href());
54+
(*argv)[1] = Utf8String(isolate, url->get_origin());
55+
(*argv)[2] = Utf8String(isolate, url->get_protocol());
56+
(*argv)[3] = Utf8String(isolate, url->get_hostname());
57+
(*argv)[4] = Utf8String(isolate, url->get_pathname());
58+
(*argv)[5] = Utf8String(isolate, url->get_search());
59+
(*argv)[6] = Utf8String(isolate, url->get_username());
60+
(*argv)[7] = Utf8String(isolate, url->get_password());
61+
(*argv)[8] = Utf8String(isolate, url->get_port());
62+
(*argv)[9] = Utf8String(isolate, url->get_hash());
6163
}
6264

6365
void Parse(const FunctionCallbackInfo<Value>& args) {
@@ -69,7 +71,6 @@ void Parse(const FunctionCallbackInfo<Value>& args) {
6971
Local<Function> success_callback_ = args[2].As<Function>();
7072

7173
Environment* env = Environment::GetCurrent(args);
72-
Isolate* isolate = env->isolate();
7374
HandleScope handle_scope(env->isolate());
7475
Context::Scope context_scope(env->context());
7576

@@ -89,20 +90,8 @@ void Parse(const FunctionCallbackInfo<Value>& args) {
8990
return args.GetReturnValue().Set(false);
9091
}
9192

92-
const Local<Value> undef = Undefined(isolate);
93-
Local<Value> argv[] = {
94-
undef,
95-
undef,
96-
undef,
97-
undef,
98-
undef,
99-
undef,
100-
undef,
101-
undef,
102-
undef,
103-
undef,
104-
};
105-
SetArgs(env, argv, out);
93+
Local<Value> argv[10];
94+
SetArgs(env, &argv, out);
10695
USE(success_callback_->Call(
10796
env->context(), args.This(), arraysize(argv), argv));
10897
args.GetReturnValue().Set(true);
@@ -235,20 +224,8 @@ void UpdateUrl(const FunctionCallbackInfo<Value>& args) {
235224
}
236225
}
237226

238-
const Local<Value> undef = Undefined(isolate);
239-
Local<Value> argv[] = {
240-
undef,
241-
undef,
242-
undef,
243-
undef,
244-
undef,
245-
undef,
246-
undef,
247-
undef,
248-
undef,
249-
undef,
250-
};
251-
SetArgs(env, argv, out);
227+
Local<Value> argv[10];
228+
SetArgs(env, &argv, out);
252229
USE(success_callback_->Call(
253230
env->context(), args.This(), arraysize(argv), argv));
254231
args.GetReturnValue().Set(result);

0 commit comments

Comments
 (0)