mirror of
https://github.com/denoland/deno.git
synced 2024-11-25 15:29:32 -05:00
chore: bump deno_core and cargo update (#20480)
Bump deno_core, pulling in new rusty_v8. Requires some op2/deprecation fixes.
This commit is contained in:
parent
12a75e3b43
commit
81d50e1b66
10 changed files with 257 additions and 411 deletions
435
Cargo.lock
generated
435
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -40,7 +40,7 @@ repository = "https://github.com/denoland/deno"
|
|||
[workspace.dependencies]
|
||||
deno_ast = { version = "0.29.1", features = ["transpiling"] }
|
||||
|
||||
deno_core = { version = "0.209.0" }
|
||||
deno_core = { version = "0.210.0" }
|
||||
|
||||
deno_runtime = { version = "0.126.0", path = "./runtime" }
|
||||
napi_sym = { version = "0.48.0", path = "./cli/napi/sym" }
|
||||
|
|
|
@ -1156,7 +1156,9 @@ where
|
|||
let res = fut.or_cancel(cancel_handle).await;
|
||||
|
||||
if let Some(cancel_rid) = cancel_rid {
|
||||
state.borrow_mut().resource_table.close(cancel_rid).ok();
|
||||
if let Ok(res) = state.borrow_mut().resource_table.take_any(cancel_rid) {
|
||||
res.close();
|
||||
}
|
||||
};
|
||||
|
||||
res?.context_path("writefile", &path)?;
|
||||
|
@ -1213,7 +1215,9 @@ where
|
|||
let res = fut.or_cancel(cancel_handle).await;
|
||||
|
||||
if let Some(cancel_rid) = cancel_rid {
|
||||
state.borrow_mut().resource_table.close(cancel_rid).ok();
|
||||
if let Ok(res) = state.borrow_mut().resource_table.take_any(cancel_rid) {
|
||||
res.close();
|
||||
}
|
||||
};
|
||||
|
||||
res?.context_path("readfile", &path)?
|
||||
|
@ -1269,7 +1273,9 @@ where
|
|||
let res = fut.or_cancel(cancel_handle).await;
|
||||
|
||||
if let Some(cancel_rid) = cancel_rid {
|
||||
state.borrow_mut().resource_table.close(cancel_rid).ok();
|
||||
if let Ok(res) = state.borrow_mut().resource_table.take_any(cancel_rid) {
|
||||
res.close();
|
||||
}
|
||||
};
|
||||
|
||||
res?.context_path("readfile", &path)?
|
||||
|
|
|
@ -46,7 +46,9 @@ impl HttpRequestBodyAutocloser {
|
|||
|
||||
impl Drop for HttpRequestBodyAutocloser {
|
||||
fn drop(&mut self) {
|
||||
_ = self.1.borrow_mut().resource_table.close(self.0);
|
||||
if let Ok(res) = self.1.borrow_mut().resource_table.take_any(self.0) {
|
||||
res.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -621,7 +621,9 @@ where
|
|||
let lookup_rv = lookup_fut.or_cancel(cancel_handle).await;
|
||||
|
||||
if let Some(cancel_rid) = cancel_rid {
|
||||
state.borrow_mut().resource_table.close(cancel_rid).ok();
|
||||
if let Ok(res) = state.borrow_mut().resource_table.take_any(cancel_rid) {
|
||||
res.close();
|
||||
}
|
||||
};
|
||||
|
||||
lookup_rv?
|
||||
|
|
|
@ -408,7 +408,9 @@ pub fn op_zlib_close_if_pending(
|
|||
};
|
||||
if pending_close {
|
||||
drop(resource);
|
||||
state.resource_table.close(handle)?;
|
||||
if let Ok(res) = state.resource_table.take_any(handle) {
|
||||
res.close();
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
|
|
@ -288,7 +288,9 @@ where
|
|||
};
|
||||
|
||||
if let Some(cancel_rid) = cancel_handle {
|
||||
state.borrow_mut().resource_table.close(cancel_rid).ok();
|
||||
if let Ok(res) = state.borrow_mut().resource_table.take_any(cancel_rid) {
|
||||
res.close();
|
||||
}
|
||||
}
|
||||
|
||||
let mut state = state.borrow_mut();
|
||||
|
|
|
@ -5,7 +5,6 @@ use crate::permissions::PermissionsContainer;
|
|||
use deno_core::anyhow::Context;
|
||||
use deno_core::error::type_error;
|
||||
use deno_core::error::AnyError;
|
||||
use deno_core::op;
|
||||
use deno_core::op2;
|
||||
use deno_core::serde_json;
|
||||
use deno_core::AsyncMutFuture;
|
||||
|
@ -334,23 +333,21 @@ fn op_spawn_child(
|
|||
spawn_child(state, command)
|
||||
}
|
||||
|
||||
// TODO(bartlomieju): op2 doesn't support clippy allows
|
||||
#[op]
|
||||
#[op2(async)]
|
||||
#[allow(clippy::await_holding_refcell_ref)]
|
||||
#[serde]
|
||||
async fn op_spawn_wait(
|
||||
state: Rc<RefCell<OpState>>,
|
||||
rid: ResourceId,
|
||||
#[smi] rid: ResourceId,
|
||||
) -> Result<ChildStatus, AnyError> {
|
||||
let resource = state
|
||||
.borrow_mut()
|
||||
.resource_table
|
||||
.get::<ChildResource>(rid)?;
|
||||
let result = resource.0.try_borrow_mut()?.wait().await?.try_into();
|
||||
state
|
||||
.borrow_mut()
|
||||
.resource_table
|
||||
.close(rid)
|
||||
.expect("shouldn't have closed until now");
|
||||
if let Ok(resource) = state.borrow_mut().resource_table.take_any(rid) {
|
||||
resource.close();
|
||||
}
|
||||
result
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
||||
use deno_core::error::type_error;
|
||||
use deno_core::error::AnyError;
|
||||
use deno_core::op;
|
||||
use deno_core::op2;
|
||||
use deno_core::AsyncRefCell;
|
||||
use deno_core::CancelFuture;
|
||||
|
@ -537,10 +536,11 @@ pub fn signal_int_to_str(s: libc::c_int) -> Result<&'static str, AnyError> {
|
|||
}
|
||||
|
||||
#[cfg(unix)]
|
||||
#[op]
|
||||
#[op2(fast)]
|
||||
#[smi]
|
||||
fn op_signal_bind(
|
||||
state: &mut OpState,
|
||||
sig: &str,
|
||||
#[string] sig: &str,
|
||||
) -> Result<ResourceId, AnyError> {
|
||||
let signo = signal_str_to_int(sig)?;
|
||||
if signal_hook_registry::FORBIDDEN.contains(&signo) {
|
||||
|
@ -557,10 +557,11 @@ fn op_signal_bind(
|
|||
}
|
||||
|
||||
#[cfg(windows)]
|
||||
#[op]
|
||||
#[op2(fast)]
|
||||
#[smi]
|
||||
fn op_signal_bind(
|
||||
state: &mut OpState,
|
||||
sig: &str,
|
||||
#[string] sig: &str,
|
||||
) -> Result<ResourceId, AnyError> {
|
||||
let signo = signal_str_to_int(sig)?;
|
||||
let resource = SignalStreamResource {
|
||||
|
@ -605,6 +606,6 @@ pub fn op_signal_unbind(
|
|||
state: &mut OpState,
|
||||
#[smi] rid: ResourceId,
|
||||
) -> Result<(), AnyError> {
|
||||
state.resource_table.close(rid)?;
|
||||
state.resource_table.take_any(rid)?.close();
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -3052,106 +3052,6 @@
|
|||
"≯ (using <area>.host)",
|
||||
"≯ (using <area>.hostname)"
|
||||
],
|
||||
"url-constructor.any.html": [
|
||||
"Parsing: </> against <file://h/C:/a/b>",
|
||||
"Parsing: <file:\\\\//> against <about:blank>",
|
||||
"Parsing: <file:\\\\\\\\> against <about:blank>",
|
||||
"Parsing: <file:\\\\\\\\?fox> against <about:blank>",
|
||||
"Parsing: <file:\\\\\\\\#guppy> against <about:blank>",
|
||||
"Parsing: <file://spider///> against <about:blank>",
|
||||
"Parsing: <file:\\\\localhost//> against <about:blank>",
|
||||
"Parsing: <file://\\/localhost//cat> against <about:blank>",
|
||||
"Parsing: <file://localhost//a//../..//> against <about:blank>",
|
||||
"Parsing: </////mouse> against <file:///elephant>",
|
||||
"Parsing: <\\/localhost//pig> against <file://lion/>",
|
||||
"Parsing: <//localhost//pig> against <file://lion/>",
|
||||
"Parsing: </..//localhost//pig> against <file://lion/>",
|
||||
"Parsing: <C|> against <file://host/dir/file>",
|
||||
"Parsing: <C|> against <file://host/D:/dir1/dir2/file>",
|
||||
"Parsing: <C|#> against <file://host/dir/file>",
|
||||
"Parsing: <C|?> against <file://host/dir/file>",
|
||||
"Parsing: <C|/> against <file://host/dir/file>",
|
||||
"Parsing: <C|\n/> against <file://host/dir/file>",
|
||||
"Parsing: <C|\\> against <file://host/dir/file>",
|
||||
"Parsing: </c:/foo/bar> against <file://host/path>",
|
||||
"Parsing: <file://example.net/C:/> against <about:blank>",
|
||||
"Parsing: <file://1.2.3.4/C:/> against <about:blank>",
|
||||
"Parsing: <file://[1::8]/C:/> against <about:blank>",
|
||||
"Parsing: <C|/> against <file://host/>",
|
||||
"Parsing: </C:/> against <file://host/>",
|
||||
"Parsing: <file:C:/> against <file://host/>",
|
||||
"Parsing: <file:/C:/> against <file://host/>",
|
||||
"Parsing: <file://localhost//a//../..//foo> against <about:blank>",
|
||||
"Parsing: <file://localhost////foo> against <about:blank>",
|
||||
"Parsing: <file:////foo> against <about:blank>",
|
||||
"Parsing: <file:////one/two> against <file:///>",
|
||||
"Parsing: <////one/two> against <file:///>",
|
||||
"Parsing: <file:///.//> against <file:////>",
|
||||
"Parsing: <file:.//p> against <about:blank>",
|
||||
"Parsing: <file:/.//p> against <about:blank>",
|
||||
"Parsing: <non-spec:/.//> against <about:blank>",
|
||||
"Parsing: <non-spec:/..//> against <about:blank>",
|
||||
"Parsing: <non-spec:/a/..//> against <about:blank>",
|
||||
"Parsing: <non-spec:/.//path> against <about:blank>",
|
||||
"Parsing: <non-spec:/..//path> against <about:blank>",
|
||||
"Parsing: <non-spec:/a/..//path> against <about:blank>",
|
||||
"Parsing: </.//path> against <non-spec:/p>",
|
||||
"Parsing: </..//path> against <non-spec:/p>",
|
||||
"Parsing: <..//path> against <non-spec:/p>",
|
||||
"Parsing: <a/..//path> against <non-spec:/p>",
|
||||
"Parsing: <> against <non-spec:/..//p>",
|
||||
"Parsing: <path> against <non-spec:/..//p>"
|
||||
],
|
||||
"url-constructor.any.worker.html": [
|
||||
"Parsing: </> against <file://h/C:/a/b>",
|
||||
"Parsing: <file:\\\\//> against <about:blank>",
|
||||
"Parsing: <file:\\\\\\\\> against <about:blank>",
|
||||
"Parsing: <file:\\\\\\\\?fox> against <about:blank>",
|
||||
"Parsing: <file:\\\\\\\\#guppy> against <about:blank>",
|
||||
"Parsing: <file://spider///> against <about:blank>",
|
||||
"Parsing: <file:\\\\localhost//> against <about:blank>",
|
||||
"Parsing: <file://\\/localhost//cat> against <about:blank>",
|
||||
"Parsing: <file://localhost//a//../..//> against <about:blank>",
|
||||
"Parsing: </////mouse> against <file:///elephant>",
|
||||
"Parsing: <\\/localhost//pig> against <file://lion/>",
|
||||
"Parsing: <//localhost//pig> against <file://lion/>",
|
||||
"Parsing: </..//localhost//pig> against <file://lion/>",
|
||||
"Parsing: <C|> against <file://host/dir/file>",
|
||||
"Parsing: <C|> against <file://host/D:/dir1/dir2/file>",
|
||||
"Parsing: <C|#> against <file://host/dir/file>",
|
||||
"Parsing: <C|?> against <file://host/dir/file>",
|
||||
"Parsing: <C|/> against <file://host/dir/file>",
|
||||
"Parsing: <C|\n/> against <file://host/dir/file>",
|
||||
"Parsing: <C|\\> against <file://host/dir/file>",
|
||||
"Parsing: </c:/foo/bar> against <file://host/path>",
|
||||
"Parsing: <file://example.net/C:/> against <about:blank>",
|
||||
"Parsing: <file://1.2.3.4/C:/> against <about:blank>",
|
||||
"Parsing: <file://[1::8]/C:/> against <about:blank>",
|
||||
"Parsing: <C|/> against <file://host/>",
|
||||
"Parsing: </C:/> against <file://host/>",
|
||||
"Parsing: <file:C:/> against <file://host/>",
|
||||
"Parsing: <file:/C:/> against <file://host/>",
|
||||
"Parsing: <file://localhost//a//../..//foo> against <about:blank>",
|
||||
"Parsing: <file://localhost////foo> against <about:blank>",
|
||||
"Parsing: <file:////foo> against <about:blank>",
|
||||
"Parsing: <file:////one/two> against <file:///>",
|
||||
"Parsing: <////one/two> against <file:///>",
|
||||
"Parsing: <file:///.//> against <file:////>",
|
||||
"Parsing: <file:.//p> against <about:blank>",
|
||||
"Parsing: <file:/.//p> against <about:blank>",
|
||||
"Parsing: <non-spec:/.//> against <about:blank>",
|
||||
"Parsing: <non-spec:/..//> against <about:blank>",
|
||||
"Parsing: <non-spec:/a/..//> against <about:blank>",
|
||||
"Parsing: <non-spec:/.//path> against <about:blank>",
|
||||
"Parsing: <non-spec:/..//path> against <about:blank>",
|
||||
"Parsing: <non-spec:/a/..//path> against <about:blank>",
|
||||
"Parsing: </.//path> against <non-spec:/p>",
|
||||
"Parsing: </..//path> against <non-spec:/p>",
|
||||
"Parsing: <..//path> against <non-spec:/p>",
|
||||
"Parsing: <a/..//path> against <non-spec:/p>",
|
||||
"Parsing: <> against <non-spec:/..//p>",
|
||||
"Parsing: <path> against <non-spec:/..//p>"
|
||||
],
|
||||
"url-origin.any.html": [
|
||||
"Origin parsing: <blob:blob:https://example.org/> without base",
|
||||
"Origin parsing: <blob:ftp://host/path> without base",
|
||||
|
@ -3167,40 +3067,16 @@
|
|||
"url-searchparams.any.html": true,
|
||||
"url-searchparams.any.worker.html": true,
|
||||
"url-setters-stripping.any.html": [
|
||||
"Setting protocol with leading U+0000 (https:)",
|
||||
"Setting protocol with U+0000 before inserted colon (https:)",
|
||||
"Setting port with leading U+0000 (https:)",
|
||||
"Setting pathname with trailing U+0000 (https:)",
|
||||
"Setting protocol with leading U+001F (https:)",
|
||||
"Setting protocol with U+001F before inserted colon (https:)",
|
||||
"Setting port with leading U+001F (https:)",
|
||||
"Setting pathname with trailing U+001F (https:)",
|
||||
"Setting protocol with leading U+0000 (wpt++:)",
|
||||
"Setting protocol with U+0000 before inserted colon (wpt++:)",
|
||||
"Setting port with leading U+0000 (wpt++:)",
|
||||
"Setting pathname with trailing U+0000 (wpt++:)",
|
||||
"Setting protocol with leading U+001F (wpt++:)",
|
||||
"Setting protocol with U+001F before inserted colon (wpt++:)",
|
||||
"Setting port with leading U+001F (wpt++:)",
|
||||
"Setting pathname with trailing U+001F (wpt++:)"
|
||||
"Setting port with leading U+001F (wpt++:)"
|
||||
],
|
||||
"url-setters-stripping.any.worker.html": [
|
||||
"Setting protocol with leading U+0000 (https:)",
|
||||
"Setting protocol with U+0000 before inserted colon (https:)",
|
||||
"Setting port with leading U+0000 (https:)",
|
||||
"Setting pathname with trailing U+0000 (https:)",
|
||||
"Setting protocol with leading U+001F (https:)",
|
||||
"Setting protocol with U+001F before inserted colon (https:)",
|
||||
"Setting port with leading U+001F (https:)",
|
||||
"Setting pathname with trailing U+001F (https:)",
|
||||
"Setting protocol with leading U+0000 (wpt++:)",
|
||||
"Setting protocol with U+0000 before inserted colon (wpt++:)",
|
||||
"Setting port with leading U+0000 (wpt++:)",
|
||||
"Setting pathname with trailing U+0000 (wpt++:)",
|
||||
"Setting protocol with leading U+001F (wpt++:)",
|
||||
"Setting protocol with U+001F before inserted colon (wpt++:)",
|
||||
"Setting port with leading U+001F (wpt++:)",
|
||||
"Setting pathname with trailing U+001F (wpt++:)"
|
||||
"Setting port with leading U+001F (wpt++:)"
|
||||
],
|
||||
"url-tojson.any.html": true,
|
||||
"url-tojson.any.worker.html": true,
|
||||
|
@ -3231,36 +3107,6 @@
|
|||
"urlsearchparams-sort.any.worker.html": true,
|
||||
"urlsearchparams-stringifier.any.html": true,
|
||||
"urlsearchparams-stringifier.any.worker.html": true,
|
||||
"url-setters.any.html": [
|
||||
"URL: Setting <http://example.net/path>.hostname = 'example.com:8080' : delimiter invalidates entire value",
|
||||
"URL: Setting <http://example.net:8080/path>.hostname = 'example.com:' : delimiter invalidates entire value",
|
||||
"URL: Setting <non-spec:/.//p>.hostname = 'h' Drop /. from path",
|
||||
"URL: Setting <non-spec:/.//p>.hostname = ''",
|
||||
"URL: Setting <foo://somehost/some/path>.pathname = '' Non-special URLs can have their paths erased",
|
||||
"URL: Setting <foo:///some/path>.pathname = '' Non-special URLs with an empty host can have their paths erased",
|
||||
"URL: Setting <file://monkey/>.pathname = '\\\\' File URLs and (back)slashes",
|
||||
"URL: Setting <file:///unicorn>.pathname = '//\\/' File URLs and (back)slashes",
|
||||
"URL: Setting <file:///unicorn>.pathname = '//monkey/..//' File URLs and (back)slashes",
|
||||
"URL: Setting <non-spec:/>.pathname = '/.//p' Serialize /. in path",
|
||||
"URL: Setting <non-spec:/>.pathname = '/..//p'",
|
||||
"URL: Setting <non-spec:/>.pathname = '//p'",
|
||||
"URL: Setting <non-spec:/.//>.pathname = 'p' Drop /. from path"
|
||||
],
|
||||
"url-setters.any.worker.html": [
|
||||
"URL: Setting <http://example.net/path>.hostname = 'example.com:8080' : delimiter invalidates entire value",
|
||||
"URL: Setting <http://example.net:8080/path>.hostname = 'example.com:' : delimiter invalidates entire value",
|
||||
"URL: Setting <non-spec:/.//p>.hostname = 'h' Drop /. from path",
|
||||
"URL: Setting <non-spec:/.//p>.hostname = ''",
|
||||
"URL: Setting <foo://somehost/some/path>.pathname = '' Non-special URLs can have their paths erased",
|
||||
"URL: Setting <foo:///some/path>.pathname = '' Non-special URLs with an empty host can have their paths erased",
|
||||
"URL: Setting <file://monkey/>.pathname = '\\\\' File URLs and (back)slashes",
|
||||
"URL: Setting <file:///unicorn>.pathname = '//\\/' File URLs and (back)slashes",
|
||||
"URL: Setting <file:///unicorn>.pathname = '//monkey/..//' File URLs and (back)slashes",
|
||||
"URL: Setting <non-spec:/>.pathname = '/.//p' Serialize /. in path",
|
||||
"URL: Setting <non-spec:/>.pathname = '/..//p'",
|
||||
"URL: Setting <non-spec:/>.pathname = '//p'",
|
||||
"URL: Setting <non-spec:/.//>.pathname = 'p' Drop /. from path"
|
||||
],
|
||||
"idlharness-shadowrealm.window.html": false,
|
||||
"percent-encoding.window.html": [
|
||||
"Input † with encoding big5",
|
||||
|
@ -3278,9 +3124,6 @@
|
|||
"Input − with encoding utf-8",
|
||||
"Input á| with encoding utf-8"
|
||||
],
|
||||
"url-setters-a-area.window.html": {
|
||||
"ignore": true
|
||||
},
|
||||
"IdnaTestV2.window.html": [
|
||||
"ToASCII(\"ab\") C1",
|
||||
"ToASCII(\"AB\") C1",
|
||||
|
@ -4071,10 +3914,6 @@
|
|||
"<area>: Setting <mailto:me@example.net>.pathname = '/foo' Opaque paths cannot be set"
|
||||
],
|
||||
"url-setters.any.html?exclude=(file|javascript|mailto)": [
|
||||
"URL: Setting <http://test/>.protocol = 'https\u0000' Non-tab/newline C0 controls result in no-op",
|
||||
"URL: Setting <http://test/>.protocol = 'https\f'",
|
||||
"URL: Setting <http://test/>.protocol = 'https\u000e'",
|
||||
"URL: Setting <http://test/>.protocol = 'https '",
|
||||
"URL: Setting <http://example.net/path>.hostname = 'example.com:8080' : delimiter invalidates entire value",
|
||||
"URL: Setting <http://example.net:8080/path>.hostname = 'example.com:' : delimiter invalidates entire value",
|
||||
"URL: Setting <non-spec:/.//p>.hostname = 'h' Drop /. from path",
|
||||
|
@ -4086,8 +3925,6 @@
|
|||
"URL: Setting <non-spec:/>.pathname = '/..//p'",
|
||||
"URL: Setting <non-spec:/>.pathname = '//p'",
|
||||
"URL: Setting <non-spec:/.//>.pathname = 'p' Drop /. from path",
|
||||
"URL: Setting <data:/nospace>.pathname = 'space ' Non-special URLs with non-opaque paths percent-encode U+0020",
|
||||
"URL: Setting <sc:/nospace>.pathname = 'space '",
|
||||
"URL: Setting <data:space ?query#fragment>.search = '' Do not drop trailing spaces from non-trailing opaque paths",
|
||||
"URL: Setting <sc:space ?query#fragment>.search = ''"
|
||||
],
|
||||
|
@ -4099,10 +3936,6 @@
|
|||
"url-setters.any.html?include=javascript": true,
|
||||
"url-setters.any.html?include=mailto": true,
|
||||
"url-setters.any.worker.html?exclude=(file|javascript|mailto)": [
|
||||
"URL: Setting <http://test/>.protocol = 'https\u0000' Non-tab/newline C0 controls result in no-op",
|
||||
"URL: Setting <http://test/>.protocol = 'https\f'",
|
||||
"URL: Setting <http://test/>.protocol = 'https\u000e'",
|
||||
"URL: Setting <http://test/>.protocol = 'https '",
|
||||
"URL: Setting <http://example.net/path>.hostname = 'example.com:8080' : delimiter invalidates entire value",
|
||||
"URL: Setting <http://example.net:8080/path>.hostname = 'example.com:' : delimiter invalidates entire value",
|
||||
"URL: Setting <non-spec:/.//p>.hostname = 'h' Drop /. from path",
|
||||
|
@ -4114,8 +3947,6 @@
|
|||
"URL: Setting <non-spec:/>.pathname = '/..//p'",
|
||||
"URL: Setting <non-spec:/>.pathname = '//p'",
|
||||
"URL: Setting <non-spec:/.//>.pathname = 'p' Drop /. from path",
|
||||
"URL: Setting <data:/nospace>.pathname = 'space ' Non-special URLs with non-opaque paths percent-encode U+0020",
|
||||
"URL: Setting <sc:/nospace>.pathname = 'space '",
|
||||
"URL: Setting <data:space ?query#fragment>.search = '' Do not drop trailing spaces from non-trailing opaque paths",
|
||||
"URL: Setting <sc:space ?query#fragment>.search = ''"
|
||||
],
|
||||
|
|
Loading…
Reference in a new issue