@@ -1209,21 +1209,33 @@ inline url_data HarvestBase(Environment* env, Local<Object> base_obj) {
1209
1209
base_obj->Get (env->context (), env->scheme_string ()).ToLocalChecked ();
1210
1210
base.scheme = Utf8Value (env->isolate (), scheme).out ();
1211
1211
1212
- auto GetStr = [&](std::string url_data::* member,
1212
+ auto GetStr = [&](std::string url_data::*member,
1213
1213
int flag,
1214
- Local<String> name) {
1214
+ Local<String> name,
1215
+ bool empty_as_present) {
1215
1216
Local<Value> value = base_obj->Get (env->context (), name).ToLocalChecked ();
1216
1217
if (value->IsString ()) {
1217
1218
Utf8Value utf8value (env->isolate (), value.As <String>());
1218
1219
(base.*member).assign (*utf8value, utf8value.length ());
1219
- base.flags |= flag;
1220
+ if (empty_as_present || value.As <String>()->Length () != 0 ) {
1221
+ base.flags |= flag;
1222
+ }
1220
1223
}
1221
1224
};
1222
- GetStr (&url_data::username, URL_FLAGS_HAS_USERNAME, env->username_string ());
1223
- GetStr (&url_data::password, URL_FLAGS_HAS_PASSWORD, env->password_string ());
1224
- GetStr (&url_data::host, URL_FLAGS_HAS_HOST, env->host_string ());
1225
- GetStr (&url_data::query, URL_FLAGS_HAS_QUERY, env->query_string ());
1226
- GetStr (&url_data::fragment, URL_FLAGS_HAS_FRAGMENT, env->fragment_string ());
1225
+ GetStr (&url_data::username,
1226
+ URL_FLAGS_HAS_USERNAME,
1227
+ env->username_string (),
1228
+ false );
1229
+ GetStr (&url_data::password,
1230
+ URL_FLAGS_HAS_PASSWORD,
1231
+ env->password_string (),
1232
+ false );
1233
+ GetStr (&url_data::host, URL_FLAGS_HAS_HOST, env->host_string (), true );
1234
+ GetStr (&url_data::query, URL_FLAGS_HAS_QUERY, env->query_string (), true );
1235
+ GetStr (&url_data::fragment,
1236
+ URL_FLAGS_HAS_FRAGMENT,
1237
+ env->fragment_string (),
1238
+ true );
1227
1239
1228
1240
Local<Value> port =
1229
1241
base_obj->Get (env->context (), env->port_string ()).ToLocalChecked ();
0 commit comments