{"record":{"id":"f530e38e79733193","repo":"Humanizr/Humanizer","slug":"gender-f530e3","errorCode":null,"errorMessage":"gender","messagePattern":"gender","errorType":"exception","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"src/Humanizer/Localisation/NumberToWords/WestSlavicGenderedNumberToWordsConverter.cs","lineNumber":117,"sourceCode":"    }\n\n    /// <summary>\n    /// Returns the unit form for the requested gender.\n    /// </summary>\n    string UnitByGender(ulong number, GrammaticalGender? gender)\n    {\n        if (number != 1 && number != 2)\n        {\n            return profile.UnitsMap[number];\n        }\n\n        return gender switch\n        {\n            GrammaticalGender.Masculine => profile.UnitsMasculineForms[number - 1],\n            GrammaticalGender.Feminine => profile.UnitsFeminineForms[number - 1],\n            GrammaticalGender.Neuter => profile.UnitsNeuterForms[number - 1],\n            null => profile.UnitsInvariantForms[number - 1],\n            _ => throw new ArgumentOutOfRangeException(nameof(gender))\n        };\n    }\n\n    static ulong GetAbsoluteValue(long value) =>\n        value >= 0 ? (ulong)value : unchecked((ulong)(-(value + 1)) + 1);\n}\n\n/// <summary>\n/// Immutable generated profile for <see cref=\"WestSlavicGenderedNumberToWordsConverter\"/>.\n/// </summary>\n/// <param name=\"minusWord\">The word used to prefix negative values.</param>\n/// <param name=\"unitsMap\">The base unit lexicon.</param>\n/// <param name=\"tensMap\">The tens lexicon.</param>\n/// <param name=\"hundredsMap\">The hundreds lexicon.</param>\n/// <param name=\"unitsMasculineForms\">The masculine forms for units 1 and 2.</param>\n/// <param name=\"unitsFeminineForms\">The feminine forms for units 1 and 2.</param>\n/// <param name=\"unitsNeuterForms\">The neuter forms for units 1 and 2.</param>\n/// <param name=\"unitsInvariantForms\">The fallback forms when no gender-specific form is used.</param>","sourceCodeStart":99,"sourceCodeEnd":135,"githubUrl":"https://github.com/Humanizr/Humanizer/blob/ffc2b77c0f30d2fb176875841424379319d0ae9b/src/Humanizer/Localisation/NumberToWords/WestSlavicGenderedNumberToWordsConverter.cs#L99-L135","documentation":"This ArgumentOutOfRangeException is the discard arm of UnitByGender on WestSlavicGenderedNumberToWordsConverter (Czech, Slovak, Polish family). The switch patterns Masculine, Feminine, Neuter, and null — covering every value the nullable GrammaticalGender? type can hold from the declared enum. The discard is reachable only through an enum carrying an undeclared integral value (invalid cast) and is otherwise unreachable.","triggerScenarios":"Calling Convert(number, gender) on a West Slavic locale where the gender passed to CollectLessThanThousand is an invalid GrammaticalGender cast value, causing UnitByGender to hit the discard when the number is 1 or 2.","commonSituations":"Passing a GrammaticalGender deserialized from an integer without validation; interop with a dynamically typed or untyped source; forwarding a raw enum code through a loosely typed API boundary.","solutions":["Validate the gender with Enum.IsDefined before calling ToWords on West Slavic locales.","Default invalid genders to GrammaticalGender.Masculine at the boundary where external data enters.","Bind GrammaticalGender by name during (de)serialization to avoid phantom integral values."],"exampleFix":"// before\nvar gender = (GrammaticalGender)dbValue;\nreturn number.ToWords(gender, new CultureInfo(\"cs\"));\n\n// after\nvar gender = Enum.IsDefined(typeof(GrammaticalGender), dbValue)\n    ? (GrammaticalGender)dbValue\n    : GrammaticalGender.Masculine;\nreturn number.ToWords(gender, new CultureInfo(\"cs\"));","handlingStrategy":"validation","validationCode":"bool IsValidGender(GrammaticalGender gender) =>\n    gender is GrammaticalGender.Masculine\n        or GrammaticalGender.Feminine\n        or GrammaticalGender.Neuter;","typeGuard":"static bool IsDefinedGender(GrammaticalGender gender) =>\n    Enum.IsDefined(typeof(GrammaticalGender), gender);","tryCatchPattern":"try\n{\n    return number.ToWords(gender, new CultureInfo(\"cs\"));\n}\ncatch (ArgumentOutOfRangeException ex) when (ex.ParamName == \"gender\")\n{\n    return number.ToWords(GrammaticalGender.Masculine, new CultureInfo(\"cs\"));\n}","preventionTips":["Validate GrammaticalGender at every trust boundary before passing it to locale converters.","Use Enum.IsDefined when the gender originates from an integer source.","Bind enums by name in deserialization to prevent phantom values.","Coerce invalid genders to Masculine for graceful degradation."],"tags":["argumentoutofrange","grammatical-gender","west-slavic","number-to-words","defensive-guard"],"backgroundTag":null,"analyzedSha":"ffc2b77c0f30d2fb176875841424379319d0ae9b","analyzedAt":"2026-08-13T21:42:34.584Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}