pub struct RecursionLimits {
pub file_ops_depth: usize,
pub expr_depth: usize,
pub expr_fuel: usize,
}Expand description
Recursion limits configuration
Controls maximum depth for recursive operations to prevent stack overflow from pathological inputs (deeply nested AST structures, complex expressions).
Fields§
§file_ops_depth: usizeMaximum depth for file operation recursion (AST traversal, directory walking)
Controls how deep the AST traversal can go when processing source files. This prevents stack overflow from pathological code like:
fn f0() { fn f1() { fn f2() { ... fn f1000() {} ... } } }§Validation
- Minimum: 50 (must handle moderately nested code)
- Maximum: 150 (recommended for deeply nested code)
- Hard cap: 200 (absolute maximum, NON-NEGOTIABLE security constraint)
§Environment Override
Can be overridden with SQRY_RECURSION_FILE_OPS_DEPTH environment variable.
expr_depth: usizeMaximum depth for expression evaluation (query expressions, AST patterns)
Controls how deep expression trees can be when evaluating queries. This prevents stack overflow from complex nested boolean expressions:
(((((a AND b) OR c) AND d) OR e) AND ...)§Validation
- Minimum: 10 (must handle basic expressions)
- Maximum: 100 (recommended)
- Hard cap: 200 (absolute maximum, security constraint)
§Environment Override
Can be overridden with SQRY_RECURSION_EXPR_DEPTH environment variable.
expr_fuel: usizeFuel limit for expression evaluation (operation counter)
Alternative to depth limiting using an operation counter (“fuel”). Each recursive call consumes fuel, preventing both deep and wide recursion patterns.
§Validation
- Minimum: 100 (must handle basic queries)
- Maximum: 5000 (recommended)
- Hard cap: 10,000 (absolute maximum, NON-NEGOTIABLE security constraint)
§Environment Override
Can be overridden with SQRY_RECURSION_EXPR_FUEL environment variable.
Implementations§
Source§impl RecursionLimits
impl RecursionLimits
Sourcepub const MIN_FILE_OPS_DEPTH: usize = 50
pub const MIN_FILE_OPS_DEPTH: usize = 50
Minimum allowed file ops depth
Sourcepub const MAX_FILE_OPS_DEPTH: usize = 150
pub const MAX_FILE_OPS_DEPTH: usize = 150
Maximum recommended file ops depth
Sourcepub const ABSOLUTE_MAX_FILE_OPS_DEPTH: usize = 200
pub const ABSOLUTE_MAX_FILE_OPS_DEPTH: usize = 200
Absolute hard cap for file ops depth (NON-NEGOTIABLE)
Set to 200 (2x default) to handle legitimate deep directory structures while preventing resource exhaustion. This limit has been security-reviewed and balances usability with protection against stack overflow attacks.
Sourcepub const MIN_EXPR_DEPTH: usize = 10
pub const MIN_EXPR_DEPTH: usize = 10
Minimum allowed expression depth
Sourcepub const MAX_EXPR_DEPTH: usize = 100
pub const MAX_EXPR_DEPTH: usize = 100
Maximum recommended expression depth
Sourcepub const ABSOLUTE_MAX_EXPR_DEPTH: usize = 200
pub const ABSOLUTE_MAX_EXPR_DEPTH: usize = 200
Absolute hard cap for expression depth
Sourcepub const MIN_EXPR_FUEL: usize = 100
pub const MIN_EXPR_FUEL: usize = 100
Minimum allowed expression fuel
Sourcepub const MAX_EXPR_FUEL: usize = 5_000
pub const MAX_EXPR_FUEL: usize = 5_000
Maximum recommended expression fuel
Sourcepub const ABSOLUTE_MAX_EXPR_FUEL: usize = 10_000
pub const ABSOLUTE_MAX_EXPR_FUEL: usize = 10_000
Absolute hard cap for expression fuel (NON-NEGOTIABLE)
Set to 10,000 to prevent expression bombs (deeply nested operators) from causing stack overflows during query validation and normalization. This limit has been security-reviewed and prevents resource exhaustion attacks.
Sourcepub fn new(
file_ops_depth: usize,
expr_depth: usize,
expr_fuel: usize,
) -> Result<Self>
pub fn new( file_ops_depth: usize, expr_depth: usize, expr_fuel: usize, ) -> Result<Self>
Create a new recursion limits configuration with custom values
§Errors
Returns an error if the provided values violate safety constraints (e.g., values are below minimum thresholds or exceed maximum limits).
Sourcepub fn load_or_default() -> Result<Self>
pub fn load_or_default() -> Result<Self>
Load configuration with environment variable overrides
§Errors
Returns an error if environment variables contain invalid values or if the resulting configuration violates safety constraints.
Sourcepub fn effective_file_ops_depth(&self) -> Result<usize>
pub fn effective_file_ops_depth(&self) -> Result<usize>
Get effective file ops depth with validation
§Errors
Returns an error if the configured value is 0 (unlimited not allowed), below the minimum threshold, or exceeds the absolute maximum limit.
Sourcepub fn effective_expr_depth(&self) -> Result<usize>
pub fn effective_expr_depth(&self) -> Result<usize>
Get effective expression depth with validation
§Errors
Returns an error if the configured value is 0 (unlimited not allowed), below the minimum threshold, or exceeds the absolute maximum limit.
Sourcepub fn effective_expr_fuel(&self) -> Result<usize>
pub fn effective_expr_fuel(&self) -> Result<usize>
Get effective expression fuel with validation
§Errors
Returns an error if the configured value is 0 (unlimited not allowed), below the minimum threshold, or exceeds the absolute maximum limit.
Trait Implementations§
Source§impl Clone for RecursionLimits
impl Clone for RecursionLimits
Source§fn clone(&self) -> RecursionLimits
fn clone(&self) -> RecursionLimits
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RecursionLimits
impl Debug for RecursionLimits
Source§impl Default for RecursionLimits
impl Default for RecursionLimits
Source§impl<'de> Deserialize<'de> for RecursionLimits
impl<'de> Deserialize<'de> for RecursionLimits
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for RecursionLimits
impl RefUnwindSafe for RecursionLimits
impl Send for RecursionLimits
impl Sync for RecursionLimits
impl Unpin for RecursionLimits
impl UnsafeUnpin for RecursionLimits
impl UnwindSafe for RecursionLimits
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more