{"record":{"id":"740c685cba0fdb1f","repo":"iOfficeAI/OfficeCLI","slug":"invalid-page-value-pagefilter-expected-a-po","errorCode":null,"errorMessage":"Invalid --page value '{pageFilter}': expected a positive slide number.","messagePattern":"Invalid --page value '(.+?)': expected a positive slide number\\.","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/officecli/CommandBuilder.View.cs","lineNumber":507,"sourceCode":"                }\n                return 0;\n            }\n\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\"))","sourceCodeStart":489,"sourceCodeEnd":525,"githubUrl":"https://github.com/iOfficeAI/OfficeCLI/blob/1ced45e900782c5083ed550ddf328ee974e425e7/src/officecli/CommandBuilder.View.cs#L489-L525","documentation":"In SVG mode for PowerPoint, --page is parsed by taking the first comma/range token and int.TryParse-ing it. If that first token is not an integer (letters, decimals, empty), an ArgumentException is thrown (not a CliException — no Code). This surfaces invalid --page input explicitly rather than silently rendering slide 1, per the CONSISTENCY(strict-page) comment.","triggerScenarios":"`view --mode svg --page abc deck.pptx`, `--page 1.5`, `--page -1` (the '-' makes firstTok empty/non-int before the <=0 check), `--page \"\"` after trimming. SVG mode, pptx handler, non-integer first token.","commonSituations":"Typo in --page (letters); pasting a range like '1-3' but the code splits on '-' and the leading token is fine yet trailing token invalid triggers a different branch; using a label/slide-name instead of a number; shell quoting producing an empty string.","solutions":["Pass a positive integer to --page (e.g. --page 2)","For a range use html mode (--mode html), which accepts M-N and comma lists; SVG renders one slide","Strip non-numeric characters or slide labels before passing to --page"],"exampleFix":"// before\nofficecli view --mode svg --page two deck.pptx\n// after\nofficecli view --mode svg --page 2 deck.pptx","handlingStrategy":"validation","validationCode":"// Validate --page is a positive integer before SVG mode on pptx.\nstring firstTok = pageFilter.Split(',')[0].Split('-')[0].Trim();\nif (!int.TryParse(firstTok, out int p))\n{\n    // reject before invoking; prompt the user for a number\n}\n// pass a clean integer to --page","typeGuard":"bool IsValidSvgPage(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 > 0;\n}","tryCatchPattern":"try\n{\n    // invoke view --mode svg --page X deck.pptx\n}\ncatch (System.ArgumentException ex) when (ex.Message.Contains(\"expected a positive slide number\"))\n{\n    // --page was non-numeric; reprompt for an integer slide number\n}","preventionTips":["Validate --page is a positive integer before SVG mode (no ranges — SVG is single-slide)","Omit --page to default to slide 1 if you don't need a specific slide","Use --mode html for range/comma page lists"],"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"}