{"record":{"id":"0cfbf704d42afadc","repo":"stride3d/stride","slug":"params-of-strings-is-not-yet-implemented-operandenumerator","errorCode":null,"errorMessage":"params of strings is not yet implemented","messagePattern":"params of strings is not yet implemented","errorType":"exception","errorClass":"NotImplementedException","httpStatus":null,"severity":"error","filePath":"sources/shaders/Stride.Shaders.Spirv/Parsing/OperandEnumerator.cs","lineNumber":75,"sourceCode":"                }\n                else if (\n                    logOp.Kind == OperandKind.LiteralString\n                    && wid < Operands.Length\n                )\n                {\n                    while (!Operands[wid].HasEndString())\n                        wid += 1;\n                    wid += 1;\n                }\n                else if (wid < Operands.Length)\n                    wid += 1;\n                oid += 1;\n\n            }\n            else if (logOp.Quantifier == OperandQuantifier.ZeroOrMore)\n            {\n                if (logOp.Kind == OperandKind.LiteralString)\n                    throw new NotImplementedException(\"params of strings is not yet implemented\");\n                else if (\n                    Pairs.Contains(logOp.Kind ?? throw new Exception())\n                    && wid < Operands.Length - 2\n                )\n                    wid += 2;\n                else if (wid < Operands.Length - 1)\n                    wid += 1;\n                else\n                    oid += 1;\n\n            }\n            return wid < Operands.Length;\n        }\n\n    }\n\n    public SpvOperand ParseCurrent()\n    {","sourceCodeStart":57,"sourceCodeEnd":93,"githubUrl":"https://github.com/stride3d/stride/blob/96fad776d210c221682aac1ccdf4c79dc046fc38/sources/shaders/Stride.Shaders.Spirv/Parsing/OperandEnumerator.cs#L57-L93","documentation":"OperandEnumerator.MoveNext throws this NotImplementedException when it encounters a variadic (ZeroOrMore) operand of Kind LiteralString. Multi-word strings in a variadic list cannot be skipped/advanced with the current word-counting logic, which assumes fixed-size operands. This is an explicitly unimplemented feature, not a data corruption.","triggerScenarios":"Parsing any instruction whose grammar contains a ZeroOrMore LiteralString operand, e.g. OpSource with a file-name list, or extension-style variadic string operands.","commonSituations":"Modules compiled by glslang/dxc that emit OpSource or OpModuleProcessed with string payloads; SPIR-V from shaders using certain extensions that put multiple strings in one instruction.","solutions":["Upgrade to a Stride version that implements variadic string operand parsing","Pre-process the module to strip or rewrite instructions with variadic string operands (e.g. remove OpSource/OpModuleProcessed via spirv-remap or spirv-val tooling)","Patch OperandEnumerator to scan for null-terminated word sequences when Kind == LiteralString && Quantifier == ZeroOrMore","Catch NotImplementedException and fall back to a raw-word parse for that instruction"],"exampleFix":"// before (library)\nif (logOp.Kind == OperandKind.LiteralString)\n    throw new NotImplementedException(\"params of strings is not yet implemented\");\n// after (library)\nif (logOp.Kind == OperandKind.LiteralString)\n{\n    while (wid < Operands.Length && !Operands[wid].HasEndString()) wid += 1;\n    wid += 1;\n}","handlingStrategy":"try-catch","validationCode":"if (logOp.Quantifier == OperandQuantifier.ZeroOrMore && logOp.Kind == OperandKind.LiteralString)\n    throw new NotSupportedException(\"Variadic string operands unsupported\");","typeGuard":"bool IsVariadicString(OperandInfo op) => op.Quantifier == OperandQuantifier.ZeroOrMore && op.Kind == OperandKind.LiteralString;","tryCatchPattern":"try { foreach (var op in operands) { } }\ncatch (NotImplementedException ex)\n{\n    logger.LogWarning(ex, \"Variadic string operand hit; skipping instruction\");\n}","preventionTips":["Scan modules for OpSource/OpModuleProcessed before parsing","Strip variadic-string instructions with spirv tooling beforehand","Track Stride releases for variadic string support"],"tags":["spirv","parsing","not-implemented"],"backgroundTag":"method-not-implemented","analyzedSha":"96fad776d210c221682aac1ccdf4c79dc046fc38","analyzedAt":"2026-09-14T02:59:31.279Z","contentChangedAt":"2026-09-14T02:59:31.279Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}