From c29d5ff9fcd814abecf91734690184bc19b8b4bd Mon Sep 17 00:00:00 2001 From: Georg Wiese Date: Tue, 13 Aug 2024 14:09:14 +0200 Subject: [PATCH] Handle memory running out of rows --- .../src/witgen/machines/double_sorted_witness_machine.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/executor/src/witgen/machines/double_sorted_witness_machine.rs b/executor/src/witgen/machines/double_sorted_witness_machine.rs index 574b456178..1f98e896d3 100644 --- a/executor/src/witgen/machines/double_sorted_witness_machine.rs +++ b/executor/src/witgen/machines/double_sorted_witness_machine.rs @@ -4,10 +4,10 @@ use std::iter::once; use itertools::Itertools; use super::Machine; -use crate::constant_evaluator::MIN_DEGREE_LOG; +use crate::constant_evaluator::{MAX_DEGREE_LOG, MIN_DEGREE_LOG}; use crate::witgen::rows::RowPair; use crate::witgen::util::try_to_simple_poly; -use crate::witgen::{EvalResult, FixedData, MutableState, QueryCallback}; +use crate::witgen::{EvalError, EvalResult, FixedData, MutableState, QueryCallback}; use crate::witgen::{EvalValue, IncompleteCause}; use crate::Identity; use powdr_number::{DegreeType, FieldElement}; @@ -272,6 +272,7 @@ impl<'a, T: FieldElement> Machine<'a, T> for DoubleSortedWitnesses<'a, T> { if self.fixed.is_variable_size(&self.witness_cols) { let current_size = addr.len(); + assert!(current_size <= 1 << *MAX_DEGREE_LOG); let new_size = current_size.next_power_of_two() as DegreeType; let new_size = new_size.max(1 << MIN_DEGREE_LOG); log::info!( @@ -477,6 +478,10 @@ impl<'a, T: FieldElement> DoubleSortedWitnesses<'a, T> { assignments = assignments.report_side_effect(); } + if self.trace.len() >= (self.degree as usize) { + return Err(EvalError::RowsExhausted(self.name.clone())); + } + Ok(assignments) } }