mirror of
https://github.com/urbit/ares.git
synced 2024-11-23 09:06:23 +03:00
nock: fix slot access bug
This commit is contained in:
parent
b78ccf25e5
commit
6ef60d8209
@ -661,7 +661,7 @@ impl private::RawSlots for Cell {
|
|||||||
fn raw_slot(&self, axis: &BitSlice<u64, Lsb0>) -> Result<Noun> {
|
fn raw_slot(&self, axis: &BitSlice<u64, Lsb0>) -> Result<Noun> {
|
||||||
let mut noun: Noun = self.as_noun();
|
let mut noun: Noun = self.as_noun();
|
||||||
// Panic because all of the logic to guard against this is in Noun::RawSlots, Noun::Slots
|
// Panic because all of the logic to guard against this is in Noun::RawSlots, Noun::Slots
|
||||||
let mut cursor = axis.last_one().expect("raw_slow somehow by-passed 0 check");
|
let mut cursor = axis.last_one().expect("raw_slot somehow by-passed 0 check");
|
||||||
|
|
||||||
while cursor != 0 {
|
while cursor != 0 {
|
||||||
cursor -= 1;
|
cursor -= 1;
|
||||||
@ -1261,7 +1261,10 @@ pub trait Slots: private::RawSlots {
|
|||||||
* Retrieve component Noun at axis given as Atom, or fail with descriptive error
|
* Retrieve component Noun at axis given as Atom, or fail with descriptive error
|
||||||
*/
|
*/
|
||||||
fn slot_atom(&self, atom: Atom) -> Result<Noun> {
|
fn slot_atom(&self, atom: Atom) -> Result<Noun> {
|
||||||
self.raw_slot(atom.as_bitslice())
|
match atom.as_either() {
|
||||||
|
Left(direct) => self.slot(direct.data()),
|
||||||
|
Right(indirect) => self.raw_slot(indirect.as_bitslice()),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user