iOfficeAI/OfficeCLI · error · ArgumentException

Invalid --page value '{pageFilter}': slide number must be >=

Error message

Invalid --page value '{pageFilter}': slide number must be >= 1.

What it means

SVG/pptx --page parsed as an integer but the value is <= 0 (0 or negative). Distinct ArgumentException from the non-integer case (error 66); this one fires after int.TryParse succeeds but the value fails the positivity check. Enforces that slide numbers are 1-based.

Source

Thrown at src/officecli/CommandBuilder.View.cs:510

            if (mode.ToLowerInvariant() is "svg" or "g")
            {
                if (handler is OfficeCli.Handlers.PowerPointHandler pptSvgHandler)
                {
                    // CONSISTENCY(view-page): SVG mode honors --page like html mode; --page wins over --start
                    int slideNum = 1;
                    if (!string.IsNullOrEmpty(pageFilter))
                    {
                        var firstTok = pageFilter.Split(',')[0].Split('-')[0].Trim();
                        // CONSISTENCY(strict-page): reject non-positive --page
                        // values explicitly instead of silently rendering
                        // slide 1, mirroring how 0 / negatives are surfaced
                        // elsewhere in the CLI.
                        if (!int.TryParse(firstTok, out var p))
                            throw new ArgumentException(
                                $"Invalid --page value '{pageFilter}': expected a positive slide number.");
                        if (p <= 0)
                            throw new ArgumentException(
                                $"Invalid --page value '{pageFilter}': slide number must be >= 1.");
                        slideNum = p;
                    }
                    else if (start.HasValue && start.Value > 0)
                    {
                        slideNum = start.Value;
                    }
                    var svg = RenderViaRegistry(handler, "pptx",
                        new OfficeCli.Core.Rendering.RenderOptions
                        { Output = OfficeCli.Core.Rendering.RenderOutputKind.Svg, StartPage = slideNum })!;

                    if (browser)
                    {
                        string outPath;
                        if (svg.Contains("data-formula"))
                        {
                            // Wrap SVG in HTML shell for KaTeX formula rendering
                            // GUID keeps the path unpredictable so a local attacker

View on GitHub (pinned to 1ced45e900)

Solutions

  1. Use a slide number >= 1 (slides are 1-based)
  2. Clamp computed page values to at least 1 before passing to --page
  3. If you meant 'no specific page', omit --page entirely (defaults to slide 1, or --start)

Example fix

// before
officecli view --mode svg --page 0 deck.pptx
// after
officecli view --mode svg --page 1 deck.pptx
Defensive patterns

Strategy: validation

Validate before calling

// Reject non-positive slide numbers before SVG mode.
var firstTok = pageFilter.Split(',')[0].Split('-')[0].Trim();
if (int.TryParse(firstTok, out int p) && p <= 0)
{
    // error: slides are 1-based; do not invoke with p
}

Type guard

bool IsPositiveSlide(string? pageFilter)
{
    if (string.IsNullOrEmpty(pageFilter)) return true;
    var firstTok = pageFilter.Split(',')[0].Split('-')[0].Trim();
    return int.TryParse(firstTok, out int p) && p >= 1;
}

Try / catch

try
{
    // invoke view --mode svg --page X deck.pptx
}
catch (System.ArgumentException ex) when (ex.Message.Contains("must be >= 1"))
{
    // clamp page to >= 1 and retry
}

Prevention

When it happens

Trigger: `view --mode svg --page 0 deck.pptx`, `--page -3 deck.pptx`. SVG mode, pptx handler, integer first token that is non-positive.

Common situations: Zero-indexed assumption (user thinks slide 0 = first); negative from a script doing arithmetic that underflows; defaulting an unset variable to 0.

Related errors


AI-assisted analysis of iOfficeAI/OfficeCLI@1ced45e900 (2026-08-13). Data as JSON: /api/errors/3e1ddc93a20b36a7. Report an issue: GitHub.