diff --git a/Libraries/LibWeb/Bindings/LocationObject.cpp b/Libraries/LibWeb/Bindings/LocationObject.cpp index 4826209981..93d00d8af7 100644 --- a/Libraries/LibWeb/Bindings/LocationObject.cpp +++ b/Libraries/LibWeb/Bindings/LocationObject.cpp @@ -70,7 +70,12 @@ JS_DEFINE_NATIVE_SETTER(LocationObject::href_setter) auto new_href = value.to_string(global_object); if (vm.exception()) return; - window.impl().did_set_location_href({}, new_href); + auto href_url = window.impl().document().complete_url(new_href); + if (!href_url.is_valid()) { + vm.throw_exception(global_object, String::formatted("Invalid URL '{}'", new_href)); + return; + } + window.impl().did_set_location_href({}, href_url); } JS_DEFINE_NATIVE_GETTER(LocationObject::pathname_getter) diff --git a/Libraries/LibWeb/DOM/Window.cpp b/Libraries/LibWeb/DOM/Window.cpp index 615d0ca679..85fdf89169 100644 --- a/Libraries/LibWeb/DOM/Window.cpp +++ b/Libraries/LibWeb/DOM/Window.cpp @@ -148,7 +148,7 @@ void Window::cancel_animation_frame(i32 id) GUI::DisplayLink::unregister_callback(id); } -void Window::did_set_location_href(Badge, const String& new_href) +void Window::did_set_location_href(Badge, const URL& new_href) { auto* frame = document().frame(); if (!frame) diff --git a/Libraries/LibWeb/DOM/Window.h b/Libraries/LibWeb/DOM/Window.h index 7de6cbacf5..4339a1dfda 100644 --- a/Libraries/LibWeb/DOM/Window.h +++ b/Libraries/LibWeb/DOM/Window.h @@ -65,7 +65,7 @@ public: void clear_timeout(i32); void clear_interval(i32); - void did_set_location_href(Badge, const String& new_href); + void did_set_location_href(Badge, const URL& new_href); void did_call_location_reload(Badge); Bindings::WindowObject* wrapper() { return m_wrapper; }