Fix subtraction overflow when calculating index for `MultiValue::get()`.
Return `None` instead of panic in debug mode. Fixes #232
This commit is contained in:
parent
9716918517
commit
05eb20f9c6
|
@ -197,7 +197,6 @@ pub struct MultiValue<'lua>(Vec<Value<'lua>>);
|
|||
|
||||
impl<'lua> MultiValue<'lua> {
|
||||
/// Creates an empty `MultiValue` containing no values.
|
||||
#[inline]
|
||||
pub const fn new() -> MultiValue<'lua> {
|
||||
MultiValue(Vec::new())
|
||||
}
|
||||
|
@ -276,7 +275,10 @@ impl<'lua> MultiValue<'lua> {
|
|||
|
||||
#[inline]
|
||||
pub fn get(&self, index: usize) -> Option<&Value<'lua>> {
|
||||
self.0.get(self.0.len() - index - 1)
|
||||
if index < self.0.len() {
|
||||
return self.0.get(self.0.len() - index - 1);
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use std::ptr;
|
||||
|
||||
use mlua::{Lua, Result, Value};
|
||||
use mlua::{Lua, MultiValue, Result, Value};
|
||||
|
||||
#[test]
|
||||
fn test_value_eq() -> Result<()> {
|
||||
|
@ -63,3 +63,21 @@ fn test_value_eq() -> Result<()> {
|
|||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_multi_value() {
|
||||
let mut multi_value = MultiValue::new();
|
||||
assert_eq!(multi_value.len(), 0);
|
||||
assert_eq!(multi_value.get(0), None);
|
||||
|
||||
multi_value.push_front(Value::Number(2.));
|
||||
multi_value.push_front(Value::Number(1.));
|
||||
assert_eq!(multi_value.get(0), Some(&Value::Number(1.)));
|
||||
assert_eq!(multi_value.get(1), Some(&Value::Number(2.)));
|
||||
|
||||
assert_eq!(multi_value.pop_front(), Some(Value::Number(1.)));
|
||||
assert_eq!(multi_value[0], Value::Number(2.));
|
||||
|
||||
multi_value.clear();
|
||||
assert!(multi_value.is_empty());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue