diff --git a/plonky2/src/gates/lookup.rs b/plonky2/src/gates/lookup.rs index 7069113b..2bd3e60f 100644 --- a/plonky2/src/gates/lookup.rs +++ b/plonky2/src/gates/lookup.rs @@ -201,8 +201,14 @@ impl, const D: usize> SimpleGenerator for Loo let get_wire = |wire: usize| -> F { witness.get_target(Target::wire(self.row, wire)) }; let input_val = get_wire(LookupGate::wire_ith_looking_inp(self.slot_nb)); - let (input, output) = self.lut[input_val.to_canonical_u64() as usize]; - if input_val == F::from_canonical_u16(input) { + let idx_candidate: usize = input_val.to_canonical_u64() as usize; + let ((input, output), ok) = if idx_candidate < self.lut.len() { + (self.lut[idx_candidate], true) + } + else { + ((0,0), false) + }; + if ok && (input_val == F::from_canonical_u16(input)) { let output_val = F::from_canonical_u16(output); let out_wire = Target::wire(self.row, LookupGate::wire_ith_looking_out(self.slot_nb));