Move backpointer check into BytecodeDecoder

This commit is contained in:
Andrew Morris
2022-05-02 11:22:23 +10:00
parent 56b4676fbd
commit 212fc58cf9
2 changed files with 11 additions and 16 deletions

View File

@@ -71,9 +71,14 @@ impl BytecodeDecoder {
let from_pos = self.pos;
let pos = self.decode_pos();
if pos < from_pos {
if self.clone_at(pos).decode_type() != BytecodeType::Function {
std::panic!("Invalid: non-function pointer that points backwards");
}
}
return vs_value::VsPointer::new(
&self.data,
from_pos,
pos,
);
},
@@ -123,4 +128,8 @@ impl BytecodeDecoder {
// size of the bytecode
return self.decode_byte() as usize;
}
pub fn clone_at(&self, pos: usize) -> BytecodeDecoder {
return BytecodeDecoder { data: self.data.clone(), pos: pos };
}
}

View File

@@ -69,21 +69,7 @@ pub struct VsPointer {
}
impl VsPointer {
pub fn new(bytecode: &Rc<Vec<u8>>, from_pos: usize, pos: usize) -> Val {
if pos < from_pos {
let mut bd = BytecodeDecoder {
data: bytecode.clone(),
pos: pos,
};
let byte = bd.decode_byte();
if byte != BytecodeType::Function as u8 {
// Prevent circular objects
std::panic!("Invalid: non-function pointer that points backwards");
}
}
pub fn new(bytecode: &Rc<Vec<u8>>, pos: usize) -> Val {
return Rc::new(VsPointer {
bytecode: bytecode.clone(),
pos: pos,