mirror of
https://github.com/servo/servo.git
synced 2025-07-16 03:43:38 +01:00
Throw if AudioBufferSourceNode.Start params are negative
This commit is contained in:
parent
3b8cb83e04
commit
b738d9a912
2 changed files with 28 additions and 16 deletions
|
@ -40,11 +40,7 @@ pub struct AudioBuffer {
|
|||
impl AudioBuffer {
|
||||
#[allow(unrooted_must_root)]
|
||||
#[allow(unsafe_code)]
|
||||
pub fn new_inherited(
|
||||
number_of_channels: u32,
|
||||
length: u32,
|
||||
sample_rate: f32,
|
||||
) -> AudioBuffer {
|
||||
pub fn new_inherited(number_of_channels: u32, length: u32, sample_rate: f32) -> AudioBuffer {
|
||||
let vec = (0..number_of_channels).map(|_| Heap::default()).collect();
|
||||
AudioBuffer {
|
||||
reflector_: Reflector::new(),
|
||||
|
@ -68,11 +64,7 @@ impl AudioBuffer {
|
|||
sample_rate: f32,
|
||||
initial_data: Option<&[f32]>,
|
||||
) -> DomRoot<AudioBuffer> {
|
||||
let buffer = AudioBuffer::new_inherited(
|
||||
number_of_channels,
|
||||
length,
|
||||
sample_rate,
|
||||
);
|
||||
let buffer = AudioBuffer::new_inherited(number_of_channels, length, sample_rate);
|
||||
let buffer = reflect_dom_object(Box::new(buffer), global, AudioBufferBinding::Wrap);
|
||||
buffer.set_channels(initial_data);
|
||||
buffer
|
||||
|
@ -84,8 +76,9 @@ impl AudioBuffer {
|
|||
options: &AudioBufferOptions,
|
||||
) -> Fallible<DomRoot<AudioBuffer>> {
|
||||
if options.numberOfChannels > MAX_CHANNEL_COUNT ||
|
||||
*options.sampleRate < MIN_SAMPLE_RATE ||
|
||||
*options.sampleRate > MAX_SAMPLE_RATE {
|
||||
*options.sampleRate < MIN_SAMPLE_RATE ||
|
||||
*options.sampleRate > MAX_SAMPLE_RATE
|
||||
{
|
||||
return Err(Error::NotSupported);
|
||||
}
|
||||
Ok(AudioBuffer::new(
|
||||
|
@ -124,7 +117,7 @@ impl AudioBuffer {
|
|||
array.handle_mut(),
|
||||
)
|
||||
};
|
||||
}
|
||||
},
|
||||
}
|
||||
chans[channel as usize].set(array.get());
|
||||
}
|
||||
|
@ -167,7 +160,8 @@ impl AudioBuffer {
|
|||
typedarray!(in(cx) let array: Float32Array = channel.get());
|
||||
if let Ok(array) = array {
|
||||
let data = array.to_vec();
|
||||
let _ = JS_DetachArrayBuffer(cx, channel.handle(), DetachDataDisposition::KeepData);
|
||||
let _ =
|
||||
JS_DetachArrayBuffer(cx, channel.handle(), DetachDataDisposition::KeepData);
|
||||
data
|
||||
} else {
|
||||
return None;
|
||||
|
|
|
@ -179,9 +179,27 @@ impl AudioBufferSourceNodeMethods for AudioBufferSourceNode {
|
|||
fn Start(
|
||||
&self,
|
||||
when: Finite<f64>,
|
||||
_offset: Option<Finite<f64>>,
|
||||
_duration: Option<Finite<f64>>,
|
||||
offset: Option<Finite<f64>>,
|
||||
duration: Option<Finite<f64>>,
|
||||
) -> Fallible<()> {
|
||||
if *when < 0. {
|
||||
return Err(Error::Range("'when' must be a positive value".to_owned()));
|
||||
}
|
||||
|
||||
if let Some(offset) = offset {
|
||||
if *offset < 0. {
|
||||
return Err(Error::Range("'offset' must be a positive value".to_owned()));
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(duration) = duration {
|
||||
if *duration < 0. {
|
||||
return Err(Error::Range(
|
||||
"'duration' must be a positive value".to_owned(),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(buffer) = self.buffer.get() {
|
||||
let buffer = buffer.acquire_contents();
|
||||
self.source_node
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue