{"record":{"id":"3e1ddc93a20b36a7","repo":"iOfficeAI/OfficeCLI","slug":"invalid-page-value-pagefilter-slide-number","errorCode":null,"errorMessage":"Invalid --page value '{pageFilter}': slide number must be >= 1.","messagePattern":"Invalid --page value '(.+?)': slide number must be >= 1\\.","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/officecli/CommandBuilder.View.cs","lineNumber":510,"sourceCode":"\n            if (mode.ToLowerInvariant() is \"svg\" or \"g\")\n            {\n                if (handler is OfficeCli.Handlers.PowerPointHandler pptSvgHandler)\n                {\n                    // CONSISTENCY(view-page): SVG mode honors --page like html mode; --page wins over --start\n                    int slideNum = 1;\n                    if (!string.IsNullOrEmpty(pageFilter))\n                    {\n                        var firstTok = pageFilter.Split(',')[0].Split('-')[0].Trim();\n                        // CONSISTENCY(strict-page): reject non-positive --page\n                        // values explicitly instead of silently rendering\n                        // slide 1, mirroring how 0 / negatives are surfaced\n                        // elsewhere in the CLI.\n                        if (!int.TryParse(firstTok, out var p))\n                            throw new ArgumentException(\n                                $\"Invalid --page value '{pageFilter}': expected a positive slide number.\");\n                        if (p <= 0)\n                            throw new ArgumentException(\n                                $\"Invalid --page value '{pageFilter}': slide number must be >= 1.\");\n                        slideNum = p;\n                    }\n                    else if (start.HasValue && start.Value > 0)\n                    {\n                        slideNum = start.Value;\n                    }\n                    var svg = RenderViaRegistry(handler, \"pptx\",\n                        new OfficeCli.Core.Rendering.RenderOptions\n                        { Output = OfficeCli.Core.Rendering.RenderOutputKind.Svg, StartPage = slideNum })!;\n\n                    if (browser)\n                    {\n                        string outPath;\n                        if (svg.Contains(\"data-formula\"))\n                        {\n                            // Wrap SVG in HTML shell for KaTeX formula rendering\n                            // GUID keeps the path unpredictable so a local attacker","sourceCodeStart":492,"sourceCodeEnd":528,"githubUrl":"https://github.com/iOfficeAI/OfficeCLI/blob/1ced45e900782c5083ed550ddf328ee974e425e7/src/officecli/CommandBuilder.View.cs#L492-L528","documentation":"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.","triggerScenarios":"`view --mode svg --page 0 deck.pptx`, `--page -3 deck.pptx`. SVG mode, pptx handler, integer first token that is non-positive.","commonSituations":"Zero-indexed assumption (user thinks slide 0 = first); negative from a script doing arithmetic that underflows; defaulting an unset variable to 0.","solutions":["Use a slide number >= 1 (slides are 1-based)","Clamp computed page values to at least 1 before passing to --page","If you meant 'no specific page', omit --page entirely (defaults to slide 1, or --start)"],"exampleFix":"// before\nofficecli view --mode svg --page 0 deck.pptx\n// after\nofficecli view --mode svg --page 1 deck.pptx","handlingStrategy":"validation","validationCode":"// Reject non-positive slide numbers before SVG mode.\nvar firstTok = pageFilter.Split(',')[0].Split('-')[0].Trim();\nif (int.TryParse(firstTok, out int p) && p <= 0)\n{\n    // error: slides are 1-based; do not invoke with p\n}","typeGuard":"bool IsPositiveSlide(string? pageFilter)\n{\n    if (string.IsNullOrEmpty(pageFilter)) return true;\n    var firstTok = pageFilter.Split(',')[0].Split('-')[0].Trim();\n    return int.TryParse(firstTok, out int p) && p >= 1;\n}","tryCatchPattern":"try\n{\n    // invoke view --mode svg --page X deck.pptx\n}\ncatch (System.ArgumentException ex) when (ex.Message.Contains(\"must be >= 1\"))\n{\n    // clamp page to >= 1 and retry\n}","preventionTips":["Treat slide numbers as 1-based; never pass 0 or negatives","Clamp computed page values to Math.Max(1, value)","Omit --page to default to slide 1"],"tags":["svg","page-validation","powerpoint","validation"],"backgroundTag":null,"analyzedSha":"1ced45e900782c5083ed550ddf328ee974e425e7","analyzedAt":"2026-08-13T13:01:07.193Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}