mirror of
https://github.com/microsoft/regorus.git
synced 2026-08-05 02:16:11 +00:00
feat: make policy length limits configurable per engine (#624)
- Add PolicyLengthConfig struct with max_col, max_file_bytes, and max_lines fields, replacing hardcoded constants in the lexer. - Add Engine::set_policy_length_config and clear_policy_length_config to allow callers to override the default limits. - Add Source::from_contents_with_limits and from_file_with_limits for direct Source construction with custom limits; existing from_contents and from_file signatures are preserved using defaults. - Add tests for default rejection, custom limits, and engine plumbing. - Add bindings for C, C++, Python, WASM/JS, Java, Ruby, C#, Go
This commit is contained in:
53
bindings/csharp/Regorus/PolicyLengthConfig.cs
Normal file
53
bindings/csharp/Regorus/PolicyLengthConfig.cs
Normal file
@@ -0,0 +1,53 @@
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT License.
|
||||
|
||||
using System;
|
||||
|
||||
namespace Regorus
|
||||
{
|
||||
/// <summary>
|
||||
/// Policy source length limits enforced when loading policy files.
|
||||
/// </summary>
|
||||
public readonly struct PolicyLengthConfig
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="PolicyLengthConfig"/> struct.
|
||||
/// </summary>
|
||||
/// <param name="maxCol">Maximum column width per line. Must be non-zero.</param>
|
||||
/// <param name="maxFileBytes">Maximum policy file size in bytes. Must be non-zero.</param>
|
||||
/// <param name="maxLines">Maximum number of lines per policy file. Must be non-zero.</param>
|
||||
/// <exception cref="ArgumentOutOfRangeException">Thrown when any parameter is zero.</exception>
|
||||
public PolicyLengthConfig(uint maxCol, nuint maxFileBytes, nuint maxLines)
|
||||
{
|
||||
if (maxCol == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(maxCol), "Must be non-zero.");
|
||||
if (maxFileBytes == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(maxFileBytes), "Must be non-zero.");
|
||||
if (maxLines == 0)
|
||||
throw new ArgumentOutOfRangeException(nameof(maxLines), "Must be non-zero.");
|
||||
|
||||
MaxCol = maxCol;
|
||||
MaxFileBytes = maxFileBytes;
|
||||
MaxLines = maxLines;
|
||||
}
|
||||
|
||||
/// <summary>Maximum column width per line (default: 1024).</summary>
|
||||
public uint MaxCol { get; }
|
||||
|
||||
/// <summary>Maximum policy file size in bytes (default: 1 MiB).</summary>
|
||||
public nuint MaxFileBytes { get; }
|
||||
|
||||
/// <summary>Maximum number of lines per policy file (default: 20000).</summary>
|
||||
public nuint MaxLines { get; }
|
||||
|
||||
internal Regorus.Internal.RegorusPolicyLengthConfig ToNative()
|
||||
{
|
||||
return new Regorus.Internal.RegorusPolicyLengthConfig
|
||||
{
|
||||
max_col = MaxCol,
|
||||
max_file_bytes = MaxFileBytes,
|
||||
max_lines = MaxLines,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user