summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTimothy Gu <timothygu99@gmail.com>2018-11-13 15:31:44 -0800
committerRich Trott <rtrott@gmail.com>2018-12-01 08:53:05 -0800
commit639f6411a76d010b1807fd1b6e78b8ba894a281e (patch)
treeeb7b1ad48f9a0be403da992ee5eec6b3dde67686 /src
parente1438025edaf18d490548ba0f75f7ba702493c22 (diff)
downloadandroid-node-v8-639f6411a76d010b1807fd1b6e78b8ba894a281e.tar.gz
android-node-v8-639f6411a76d010b1807fd1b6e78b8ba894a281e.tar.bz2
android-node-v8-639f6411a76d010b1807fd1b6e78b8ba894a281e.zip
src: set HAS_USERNAME/PASSWORD more strictly
Fixes: https://github.com/nodejs/node/issues/24211 PR-URL: https://github.com/nodejs/node/pull/24495 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com> Reviewed-By: Daijiro Wachi <daijiro.wachi@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
Diffstat (limited to 'src')
-rw-r--r--src/node_url.cc28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/node_url.cc b/src/node_url.cc
index 9eec9dc166..39007f9523 100644
--- a/src/node_url.cc
+++ b/src/node_url.cc
@@ -1209,21 +1209,33 @@ inline url_data HarvestBase(Environment* env, Local<Object> base_obj) {
base_obj->Get(env->context(), env->scheme_string()).ToLocalChecked();
base.scheme = Utf8Value(env->isolate(), scheme).out();
- auto GetStr = [&](std::string url_data::* member,
+ auto GetStr = [&](std::string url_data::*member,
int flag,
- Local<String> name) {
+ Local<String> name,
+ bool empty_as_present) {
Local<Value> value = base_obj->Get(env->context(), name).ToLocalChecked();
if (value->IsString()) {
Utf8Value utf8value(env->isolate(), value.As<String>());
(base.*member).assign(*utf8value, utf8value.length());
- base.flags |= flag;
+ if (empty_as_present || value.As<String>()->Length() != 0) {
+ base.flags |= flag;
+ }
}
};
- GetStr(&url_data::username, URL_FLAGS_HAS_USERNAME, env->username_string());
- GetStr(&url_data::password, URL_FLAGS_HAS_PASSWORD, env->password_string());
- GetStr(&url_data::host, URL_FLAGS_HAS_HOST, env->host_string());
- GetStr(&url_data::query, URL_FLAGS_HAS_QUERY, env->query_string());
- GetStr(&url_data::fragment, URL_FLAGS_HAS_FRAGMENT, env->fragment_string());
+ GetStr(&url_data::username,
+ URL_FLAGS_HAS_USERNAME,
+ env->username_string(),
+ false);
+ GetStr(&url_data::password,
+ URL_FLAGS_HAS_PASSWORD,
+ env->password_string(),
+ false);
+ GetStr(&url_data::host, URL_FLAGS_HAS_HOST, env->host_string(), true);
+ GetStr(&url_data::query, URL_FLAGS_HAS_QUERY, env->query_string(), true);
+ GetStr(&url_data::fragment,
+ URL_FLAGS_HAS_FRAGMENT,
+ env->fragment_string(),
+ true);
Local<Value> port =
base_obj->Get(env->context(), env->port_string()).ToLocalChecked();