diff options
author | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2018-11-15 06:45:13 +0100 |
---|---|---|
committer | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2018-11-26 09:34:14 +0100 |
commit | 79d27cb7ca0267092496dbbef24844ca5ab14fb4 (patch) | |
tree | 7c53a594436f5025150e55b400562caf1d65df55 /components/net/filemanager_thread.rs | |
parent | b96e5681aaabf7b49411aa3c1b56f86c7e8570e8 (diff) | |
download | servo-79d27cb7ca0267092496dbbef24844ca5ab14fb4.tar.gz servo-79d27cb7ca0267092496dbbef24844ca5ab14fb4.zip |
Set response status for range requests to file and blob urls
Diffstat (limited to 'components/net/filemanager_thread.rs')
-rw-r--r-- | components/net/filemanager_thread.rs | 42 |
1 files changed, 27 insertions, 15 deletions
diff --git a/components/net/filemanager_thread.rs b/components/net/filemanager_thread.rs index f70d774e95e..3a639cbb741 100644 --- a/components/net/filemanager_thread.rs +++ b/components/net/filemanager_thread.rs @@ -114,18 +114,16 @@ impl FileManager { origin: FileOrigin, response: &mut Response, range: RangeRequestBounds, - ) -> Result<(), String> { - self.store - .fetch_blob_buf( - done_sender, - cancellation_listener, - &id, - &origin, - range, - check_url_validity, - response, - ) - .map_err(|e| format!("{:?}", e)) + ) -> Result<(), BlobURLStoreError> { + self.store.fetch_blob_buf( + done_sender, + cancellation_listener, + &id, + &origin, + range, + check_url_validity, + response, + ) } pub fn promote_memory( @@ -539,7 +537,13 @@ impl FileManagerStore { let file_impl = self.get_impl(id, origin_in, check_url_validity)?; match file_impl { FileImpl::Memory(buf) => { - let range = range.get_final(Some(buf.size)); + let range = match range.get_final(Some(buf.size)) { + Ok(range) => range, + Err(_) => { + return Err(BlobURLStoreError::InvalidRange); + }, + }; + let range = range.to_abs_range(buf.size as usize); let len = range.len() as u64; @@ -568,7 +572,13 @@ impl FileManagerStore { let file = File::open(&metadata.path) .map_err(|e| BlobURLStoreError::External(e.to_string()))?; - let range = range.get_final(Some(metadata.size)); + let range = match range.get_final(Some(metadata.size)) { + Ok(range) => range, + Err(_) => { + return Err(BlobURLStoreError::InvalidRange); + }, + }; + let mut reader = BufReader::with_capacity(FILE_CHUNK_SIZE, file); if reader.seek(SeekFrom::Start(range.start as u64)).is_err() { return Err(BlobURLStoreError::External( @@ -607,7 +617,9 @@ impl FileManagerStore { cancellation_listener, &parent_id, origin_in, - RangeRequestBounds::Final(range.get_final(None).slice_inner(&inner_rel_pos)), + RangeRequestBounds::Final( + RelativePos::full_range().slice_inner(&inner_rel_pos), + ), false, response, ); |