aboutsummaryrefslogtreecommitdiffstats
path: root/components/net/filemanager_thread.rs
diff options
context:
space:
mode:
authorFernando Jiménez Moreno <ferjmoreno@gmail.com>2018-11-15 06:45:13 +0100
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2018-11-26 09:34:14 +0100
commit79d27cb7ca0267092496dbbef24844ca5ab14fb4 (patch)
tree7c53a594436f5025150e55b400562caf1d65df55 /components/net/filemanager_thread.rs
parentb96e5681aaabf7b49411aa3c1b56f86c7e8570e8 (diff)
downloadservo-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.rs42
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,
);