swf: Avoid using `Reader::input` directly
Change two cases to use `Reader::read_slice` instead of `self.input`. Not only this avoids relying on an implementation detail, this also raises an `UnexpectedEof` error if the read is beyond the SWF.
This commit is contained in:
parent
ef9c073d26
commit
99deb90a1f
|
@ -100,12 +100,10 @@ impl<'a> Reader<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn read_string(&mut self) -> Result<String> {
|
fn read_string(&mut self) -> Result<String> {
|
||||||
let len = self.read_u30()? as usize;
|
let len = self.read_u30()?;
|
||||||
let mut s = String::with_capacity(len);
|
// TODO: Avoid allocating a String.
|
||||||
self.input
|
let mut s = String::with_capacity(len as usize);
|
||||||
.by_ref()
|
self.read_slice(len as usize)?.read_to_string(&mut s)?;
|
||||||
.take(len as u64)
|
|
||||||
.read_to_string(&mut s)?;
|
|
||||||
Ok(s)
|
Ok(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -474,11 +472,8 @@ impl<'a> Reader<'a> {
|
||||||
|
|
||||||
// Read the code data.
|
// Read the code data.
|
||||||
let code_len = self.read_u30()?;
|
let code_len = self.read_u30()?;
|
||||||
let mut code = Vec::with_capacity(code_len as usize);
|
// TODO: Avoid allocating a Vec.
|
||||||
self.input
|
let code = self.read_slice(code_len as usize)?.to_vec();
|
||||||
.by_ref()
|
|
||||||
.take(code_len.into())
|
|
||||||
.read_to_end(&mut code)?;
|
|
||||||
|
|
||||||
let num_exceptions = self.read_u30()? as usize;
|
let num_exceptions = self.read_u30()? as usize;
|
||||||
let mut exceptions = Vec::with_capacity(num_exceptions);
|
let mut exceptions = Vec::with_capacity(num_exceptions);
|
||||||
|
|
Loading…
Reference in New Issue