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