Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix revoke blob url #24685

Merged
merged 1 commit into from Nov 19, 2019
Merged
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

check same-origin and url against the blob beign revoked

  • Loading branch information
shnmorimoto committed Nov 18, 2019
commit 2d995ba41a73e42c9710e1fec132b5d3b501581e
@@ -40,9 +40,17 @@ pub struct BlobBuf {
/// <https://w3c.github.io/FileAPI/#DefinitionOfScheme>
pub fn parse_blob_url(url: &ServoUrl) -> Result<(Uuid, FileOrigin), ()> {
let url_inner = Url::parse(url.path()).map_err(|_| ())?;
let segs = url_inner
.path_segments()
.map(|c| c.collect::<Vec<_>>())
.ok_or(())?;

if url.query().is_some() || segs.len() > 1 {
return Err(());
}

let id = {
let mut segs = url_inner.path_segments().ok_or(())?;
let id = segs.nth(0).ok_or(())?;
let id = segs.first().ok_or(())?;
Uuid::from_str(id).map_err(|_| ())?
};
Ok((id, get_blob_origin(&ServoUrl::from_url(url_inner))))
@@ -129,13 +129,15 @@ impl URL {
let origin = get_blob_origin(&global.get_url());

if let Ok(url) = ServoUrl::parse(&url) {
if let Ok((id, _)) = parse_blob_url(&url) {
let resource_threads = global.resource_threads();
let (tx, rx) = ipc::channel(global.time_profiler_chan().clone()).unwrap();
let msg = FileManagerThreadMsg::RevokeBlobURL(id, origin, tx);
let _ = resource_threads.send(CoreResourceMsg::ToFileManager(msg));

let _ = rx.recv().unwrap();
if url.fragment().is_none() && origin == get_blob_origin(&url) {
if let Ok((id, _)) = parse_blob_url(&url) {
let resource_threads = global.resource_threads();
let (tx, rx) = ipc::channel(global.time_profiler_chan().clone()).unwrap();
let msg = FileManagerThreadMsg::RevokeBlobURL(id, origin, tx);
let _ = resource_threads.send(CoreResourceMsg::ToFileManager(msg));

let _ = rx.recv().unwrap();
}
}
}
}
@@ -1,36 +1,9 @@
[url-with-fetch.any.worker.html]
[url-with-fetch]
expected: FAIL

[Only exact matches should revoke URLs, using fetch]
expected: FAIL

[Appending a query string should cause fetch to fail]
expected: FAIL

[Appending a path should cause fetch to fail]
expected: FAIL

[Revoke blob URL after creating Request, will fetch]
expected: FAIL


[url-with-fetch.any.html]
[Untitled]
expected: FAIL

[url-with-fetch]
expected: FAIL

[Only exact matches should revoke URLs, using fetch]
expected: FAIL

[Appending a query string should cause fetch to fail]
expected: FAIL

[Appending a path should cause fetch to fail]
expected: FAIL

[Revoke blob URL after creating Request, will fetch]
expected: FAIL

@@ -1,21 +1,9 @@
[url-with-xhr.any.html]
[Only exact matches should revoke URLs, using XHR]
expected: FAIL
[Appending a query string should cause XHR to fail]
expected: FAIL
[Appending a path should cause XHR to fail]
expected: FAIL
[Revoke blob URL after open(), will fetch]
expected: FAIL


[url-with-xhr.any.worker.html]
[Only exact matches should revoke URLs, using XHR]
expected: FAIL
[Appending a query string should cause XHR to fail]
expected: FAIL
[Appending a path should cause XHR to fail]
expected: FAIL
[Revoke blob URL after open(), will fetch]
expected: FAIL

ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.