core: Made SwfSlice::to_subslice return an empty slice in case of errors
This commit is contained in:
parent
44cfaa9200
commit
3a1947445e
|
@ -306,7 +306,7 @@ impl Iterator for StreamTagReader {
|
||||||
self.mp3_samples_buffered += i32::from(num_samples);
|
self.mp3_samples_buffered += i32::from(num_samples);
|
||||||
audio_block = &audio_block[4..];
|
audio_block = &audio_block[4..];
|
||||||
}
|
}
|
||||||
*audio_data = swf_data.to_subslice(audio_block).unwrap();
|
*audio_data = swf_data.to_subslice(audio_block);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
TagCode::ShowFrame if compression == AudioCompression::Mp3 => {
|
TagCode::ShowFrame if compression == AudioCompression::Mp3 => {
|
||||||
|
|
|
@ -5,6 +5,6 @@ pub type BinaryData = SwfSlice;
|
||||||
|
|
||||||
impl BinaryData {
|
impl BinaryData {
|
||||||
pub fn from_swf_tag(movie: Arc<SwfMovie>, tag: &swf::DefineBinaryData) -> Self {
|
pub fn from_swf_tag(movie: Arc<SwfMovie>, tag: &swf::DefineBinaryData) -> Self {
|
||||||
SwfSlice::from(movie).to_subslice(tag.data).unwrap()
|
SwfSlice::from(movie).to_subslice(tag.data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -205,18 +205,18 @@ impl SwfSlice {
|
||||||
///
|
///
|
||||||
/// This function returns None if the given slice is not a subslice of the
|
/// This function returns None if the given slice is not a subslice of the
|
||||||
/// current slice.
|
/// current slice.
|
||||||
pub fn to_subslice(&self, slice: &[u8]) -> Option<Self> {
|
pub fn to_subslice(&self, slice: &[u8]) -> Self {
|
||||||
let self_pval = self.movie.data().as_ptr() as usize;
|
let self_pval = self.movie.data().as_ptr() as usize;
|
||||||
let slice_pval = slice.as_ptr() as usize;
|
let slice_pval = slice.as_ptr() as usize;
|
||||||
|
|
||||||
if (self_pval + self.start) <= slice_pval && slice_pval < (self_pval + self.end) {
|
if (self_pval + self.start) <= slice_pval && slice_pval < (self_pval + self.end) {
|
||||||
Some(Self {
|
Self {
|
||||||
movie: self.movie.clone(),
|
movie: self.movie.clone(),
|
||||||
start: slice_pval - self_pval,
|
start: slice_pval - self_pval,
|
||||||
end: (slice_pval - self_pval) + slice.len(),
|
end: (slice_pval - self_pval) + slice.len(),
|
||||||
})
|
}
|
||||||
} else {
|
} else {
|
||||||
None
|
self.copy_empty()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,7 +289,6 @@ impl SwfSlice {
|
||||||
if new_start <= new_end {
|
if new_start <= new_end {
|
||||||
if let Some(result) = self.movie.data().get(new_start..new_end) {
|
if let Some(result) = self.movie.data().get(new_start..new_end) {
|
||||||
self.to_subslice(result)
|
self.to_subslice(result)
|
||||||
.unwrap_or_else(|| self.copy_empty())
|
|
||||||
} else {
|
} else {
|
||||||
self.copy_empty()
|
self.copy_empty()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue