{"record":{"id":"99bd90c262704ab5","repo":"dotnet/reactive","slug":"thirteenth","errorCode":null,"errorMessage":"thirteenth","messagePattern":"thirteenth","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"Rx.NET/Source/src/System.Reactive/Linq/QbservableEx.Homoicon.cs","lineNumber":2196,"sourceCode":"                throw new ArgumentNullException(nameof(fourth));\n            if (fifth == null)\n                throw new ArgumentNullException(nameof(fifth));\n            if (sixth == null)\n                throw new ArgumentNullException(nameof(sixth));\n            if (seventh == null)\n                throw new ArgumentNullException(nameof(seventh));\n            if (eighth == null)\n                throw new ArgumentNullException(nameof(eighth));\n            if (ninth == null)\n                throw new ArgumentNullException(nameof(ninth));\n            if (tenth == null)\n                throw new ArgumentNullException(nameof(tenth));\n            if (eleventh == null)\n                throw new ArgumentNullException(nameof(eleventh));\n            if (twelfth == null)\n                throw new ArgumentNullException(nameof(twelfth));\n            if (thirteenth == null)\n                throw new ArgumentNullException(nameof(thirteenth));\n            if (fourteenth == null)\n                throw new ArgumentNullException(nameof(fourteenth));\n            if (fifteenth == null)\n                throw new ArgumentNullException(nameof(fifteenth));\n            if (sixteenth == null)\n                throw new ArgumentNullException(nameof(sixteenth));\n\n            return first.Provider.CreateQuery<(TFirst First, TSecond Second, TThird Third, TFourth Fourth, TFifth Fifth, TSixth Sixth, TSeventh Seventh, TEighth Eighth, TNinth Ninth, TTenth Tenth, TEleventh Eleventh, TTwelfth Twelfth, TThirteenth Thirteenth, TFourteenth Fourteenth, TFifteenth Fifteenth, TSixteenth Sixteenth)>(\n                Expression.Call(\n                    null,\n                    new Func<IQbservable<TFirst>, IObservable<TSecond>, IObservable<TThird>, IObservable<TFourth>, IObservable<TFifth>, IObservable<TSixth>, IObservable<TSeventh>, IObservable<TEighth>, IObservable<TNinth>, IObservable<TTenth>, IObservable<TEleventh>, IObservable<TTwelfth>, IObservable<TThirteenth>, IObservable<TFourteenth>, IObservable<TFifteenth>, IObservable<TSixteenth>, IQbservable<(TFirst First, TSecond Second, TThird Third, TFourth Fourth, TFifth Fifth, TSixth Sixth, TSeventh Seventh, TEighth Eighth, TNinth Ninth, TTenth Tenth, TEleventh Eleventh, TTwelfth Twelfth, TThirteenth Thirteenth, TFourteenth Fourteenth, TFifteenth Fifteenth, TSixteenth Sixteenth)>>(Zip<TFirst, TSecond, TThird, TFourth, TFifth, TSixth, TSeventh, TEighth, TNinth, TTenth, TEleventh, TTwelfth, TThirteenth, TFourteenth, TFifteenth, TSixteenth>).Method,\n                    first.Expression,\n                    GetSourceExpression(second),\n                    GetSourceExpression(third),\n                    GetSourceExpression(fourth),\n                    GetSourceExpression(fifth),\n                    GetSourceExpression(sixth),\n                    GetSourceExpression(seventh),","sourceCodeStart":2178,"sourceCodeEnd":2214,"githubUrl":"https://github.com/dotnet/reactive/blob/94b5d5ab912789f5abe9a72138a25bbd716fe59c/Rx.NET/Source/src/System.Reactive/Linq/QbservableEx.Homoicon.cs#L2178-L2214","documentation":"ArgumentNullException with parameter name 'thirteenth' thrown at QbservableEx.Homoicon.cs:2196 by the Zip argument-validation chain in QbservableEx. A 13+-ary Zip call received a null thirteenth IQbservable source; Rx.NET throws eagerly before composing the query, naming the offending parameter.","triggerScenarios":"Calling a 13+-ary QbservableEx.Zip with thirteenth == null while the first twelve sources are non-null.","commonSituations":"Very wide zips assembled from per-tenant or per-device stream collections where one entry is absent; template/codegen producing a fixed arity call with missing sources; migrations where a stream was deprecated and set to null instead of removed.","solutions":["Pass a valid non-null thirteenth sequence.","Remove the dead slot and use the lower-arity overload; for very wide zips, chain pairwise Zips instead.","Fix the source collection/provider so every slot is populated.","Validate the source array (non-null, expected length) before the Zip call."],"exampleFix":"// before\nvar zipped = QbservableEx.Zip(q1, ..., q13, selector); // q13 null after removal\n// after\n// remove the deprecated source and switch to the 12-arg overload\nvar zipped = QbservableEx.Zip(q1, q2, q3, q4, q5, q6, q7, q8, q9, q10, q11, q12, selector);","handlingStrategy":"validation","validationCode":"if (sources is { Length: 13 } && sources.Any(s => s is null))\n    throw new InvalidOperationException(\"Zip source list contains null\");","typeGuard":"bool ThirteenValid<TSource>(IQbservable<TSource>?[] xs) => xs.Length == 13 && xs.All(x => x is not null);","tryCatchPattern":"try { /* zip call */ }\ncatch (ArgumentNullException ex) when (ex.ParamName == \"thirteenth\")\n{\n    logger.LogError(ex, \"Removed/deprecated stream passed as null to Zip\");\n}","preventionTips":["When deprecating a stream, remove it from the Zip call rather than setting null.","For very wide zips, compose with pairwise Zip to avoid 13-argument calls.","Validate tenant/device stream collections for completeness before merging."],"tags":["argument-null","validation","rx","qbservable"],"backgroundTag":"null-argument","analyzedSha":"94b5d5ab912789f5abe9a72138a25bbd716fe59c","analyzedAt":"2026-09-15T02:26:24.759Z","contentChangedAt":"2026-09-15T02:26:24.759Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}