Skip to content

Commit 0f95023

Browse files
committed
Panic on large offsets
1 parent 1ff1653 commit 0f95023

2 files changed

Lines changed: 7 additions & 12 deletions

File tree

‎libcc2rs/src/field.rs‎

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1562,11 +1562,10 @@ mod tests {
15621562
}
15631563

15641564
#[test]
1565+
#[should_panic(expected = "too large for a pointer to its elements")]
15651566
fn far_vector_field_ptr() {
1566-
let holder = holds_far();
1567-
let far: Ptr<Far> = field_ptr!(holder, far);
1568-
let v: Ptr<i32> = field_ref!(far, v).as_pointer().decay();
1569-
assert_eq!(v.offset(1).read(), 6);
1567+
let far: Ptr<Far> = field_ptr!(holds_far(), far);
1568+
let _: Ptr<i32> = field_ref!(far, v).as_pointer().decay();
15701569
}
15711570

15721571
#[test]
@@ -1576,8 +1575,6 @@ mod tests {
15761575
let s: Value<Far> = Rc::new(RefCell::new(holds_far().borrow().far.clone()));
15771576
let arr: Ptr<i32> = array_field_ptr!(s, arr);
15781577
assert_eq!(arr.offset(2).read(), 3);
1579-
let v: Ptr<i32> = field_ref!(s, v).as_pointer().decay();
1580-
assert_eq!(v.offset(1).read(), 6);
15811578
}
15821579

15831580
#[derive(Clone, Default, Record, ByteRepr)]

‎libcc2rs/src/rc.rs‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1466,12 +1466,10 @@ impl<T: 'static> Ptr<Vec<T>> {
14661466
kind: PtrKind::HeapVec(weak.clone()),
14671467
},
14681468
// The elements of a field are reached through the struct.
1469-
PtrKind::Field(root, _, FieldShape::Single) if u32::try_from(self.offset).is_ok() => {
1470-
Ptr {
1471-
offset: 0,
1472-
kind: PtrKind::Field(root.clone(), self.offset as u32, FieldShape::Vec),
1473-
}
1474-
}
1469+
PtrKind::Field(root, _, FieldShape::Single) => Ptr {
1470+
offset: 0,
1471+
kind: PtrKind::Field(root.clone(), field_offset(self.offset), FieldShape::Vec),
1472+
},
14751473
PtrKind::StackVec(_)
14761474
| PtrKind::HeapVec(_)
14771475
| PtrKind::StackArray(_)

0 commit comments

Comments
 (0)