From 79d27cb7ca0267092496dbbef24844ca5ab14fb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20Jim=C3=A9nez=20Moreno?= Date: Thu, 15 Nov 2018 06:45:13 +0100 Subject: Set response status for range requests to file and blob urls --- components/net/filemanager_thread.rs | 42 +++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 15 deletions(-) (limited to 'components/net/filemanager_thread.rs') 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, ); -- cgit v1.2.3