{"record":{"id":"8b5d7c65e6690eae","repo":"Unity-Technologies/UnityCsReference","slug":"invalid-version-string-in-filtername-for-fieldn","errorCode":null,"errorMessage":"Invalid version string in {filterName} for {fieldName}=\"{value}\": {versionErrorMessage}","messagePattern":"Invalid version string in (.+?) for (.+?)=\"(.+?)\": (.+?)","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"Editor/Mono/PlayerSettingsAndroid.bindings.cs","lineNumber":995,"sourceCode":"\n            [Obsolete(\"driverVersionStringValue is obsolete. Use VulkanDeviceFilterLists api instead.\")]\n            private static readonly string driverVersionStringValue = \"driverVersionString\";\n\n            // Keep in sync with same error message in VulkanDeviceFilterLists.Bindings.cs\n            [Obsolete(\"versionErrorMessage is obsolete. Use VulkanDeviceFilterLists api instead.\")]\n            private static readonly string versionErrorMessage = \"Version information should be formatted as:\" +\n                \"\\n1. 'MajorVersion.MinorVersion.PatchVersion' where MinorVersion and PatchVersion are optional and must only \" +\n                \"contain numbers, or \\n2. Hex number beginning with '0x' (max 4-bytes)\";\n\n            // Keep in sync with validVersionString in VulkanDeviceFilterLists.Bindings.cs\n            [Obsolete(\"validVersionString is obsolete. Use VulkanDeviceFilterLists api instead.\")]\n            private static readonly Regex validVersionString = new Regex(@\"(^[0-9]+(\\.[0-9]+){0,2}$)|(^0(x|X)([A-Fa-f0-9]{1,8})$)\", RegexOptions.Compiled);\n\n            [Obsolete(\"CheckVersion is obsolete. Use VulkanDeviceFilterLists api instead.\")]\n            internal static void CheckVersion(string value, string filterName, string fieldName)\n            {\n                if (!validVersionString.IsMatch(value))\n                    throw new ArgumentException($\"Invalid version string in {filterName} for {fieldName}=\\\"{value}\\\": {versionErrorMessage}\");\n            }\n\n            [Obsolete(\"CheckRegex is obsolete. Use VulkanDeviceFilterLists api instead.\")]\n            internal static void CheckRegex(string value, string filterName, string fieldName)\n            {\n                try\n                {\n                    // Try to create a regex from the input string to determine if it is a valid regex\n                    Regex regex = new Regex(value);\n                }\n                catch (ArgumentException e)\n                {\n                    throw new ArgumentException($\"Invalid Regular Expression in {filterName} for {fieldName}=\\\"{value}\\\": {e.Message}\");\n                }\n            }\n\n            [Obsolete(\"CheckAllFilterData is obsolete. Use VulkanDeviceFilterLists api instead.\")]\n            internal static void CheckAllFilterData(AndroidDeviceFilterData[] filterDataList, string filterName)","sourceCodeStart":977,"sourceCodeEnd":1013,"githubUrl":"https://github.com/Unity-Technologies/UnityCsReference/blob/225b0fbdb57cc17d094e8056b71f8314aba56f73/Editor/Mono/PlayerSettingsAndroid.bindings.cs#L977-L1013","documentation":"Thrown by the obsolete VulkanDeviceFilter.CheckVersion method when a version string does not match the expected format: either 'Major.Minor.Patch' (where Minor and Patch are optional, numbers only) or a hex number starting with '0x' (max 4 bytes / 8 hex digits). This validates GPU device filter version constraints used in the Android Vulkan device filter list. The method is obsolete — use VulkanDeviceFilterLists API instead.","triggerScenarios":"Calling CheckVersion with a version string that doesn't match the regex (^[0-9]+(\\.[0-9]+){0,2}$)|(^0(x|X)([A-Fa-f0-9]{1,8})$). Examples: '1.2.3.4' (too many segments), 'v1.0' (invalid prefix), '0x123456789' (too many hex digits), '1.x' (non-numeric).","commonSituations":"Editing Vulkan device filter lists in Android player settings; copying version strings from device specifications that use different formats; upgrading from a Unity version with looser validation; using the obsolete API after migration guidance was issued.","solutions":["Format version strings as 'Major.Minor.Patch' (e.g. '1.1.0') or hex (e.g. '0x110000') matching the regex.","Migrate to the VulkanDeviceFilterLists API which replaces the obsolete CheckVersion method.","Validate version strings against the regex before assigning: Regex.IsMatch(value, pattern)."],"exampleFix":"// before\nCheckVersion(\"v1.2\", filterName, fieldName); // invalid prefix\n\n// after\nCheckVersion(\"1.2\", filterName, fieldName);","handlingStrategy":"validation","validationCode":"var pattern = @\"(^[0-9]+(\\.[0-9]+){0,2}$)|(^0(x|X)([A-Fa-f0-9]{1,8})$)\";\nif (Regex.IsMatch(value, pattern))\n    CheckVersion(value, filterName, fieldName);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Format version strings as 'Major.Minor.Patch' or '0x' hex (max 8 digits).","Migrate to the VulkanDeviceFilterLists API to replace the obsolete CheckVersion.","Pre-validate version strings against the regex before assigning."],"tags":["unity-editor","android","vulkan","version-validation","obsolete-api"],"backgroundTag":null,"analyzedSha":"225b0fbdb57cc17d094e8056b71f8314aba56f73","analyzedAt":"2026-08-13T19:07:19.849Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}