{"record":{"id":"0018b6380daf5ac8","repo":"AvaloniaUI/Avalonia","slug":"invalid-application-identifier","errorCode":null,"errorMessage":"Invalid application identifier","messagePattern":"Invalid application identifier","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Avalonia.Base/Input/DataFormat.cs","lineNumber":161,"sourceCode":"    /// <typeparam name=\"T\">The data type. Can be any reference type.</typeparam>\n    /// <param name=\"identifier\">\n    /// The format identifier. This value is only used for equality comparisons within the process\n    /// and is never passed to the underlying platform.\n    /// </param>\n    /// <returns>A new <see cref=\"DataFormat{T}\"/>.</returns>\n    public static DataFormat<T> CreateInProcessFormat<T>(string identifier)\n        where T : class\n    {\n        ThrowHelper.ThrowIfNullOrEmpty(identifier);\n\n        return new(DataFormatKind.InProcess, identifier);\n    }\n\n    private static DataFormat<T> CreateApplicationFormat<T>(string identifier)\n        where T : class\n    {\n        if (!IsValidApplicationFormatIdentifier(identifier))\n            throw new ArgumentException(\"Invalid application identifier\", nameof(identifier));\n\n        return new(DataFormatKind.Application, identifier);\n    }\n\n    /// <summary>\n    /// Creates a new format for the current platform that returns an array of <see cref=\"byte\"/>.\n    /// </summary>\n    /// <param name=\"identifier\">\n    /// The format identifier. This value is not validated and is passed AS IS to the underlying platform.\n    /// Most systems use mime types, but macOS requires Uniform Type Identifiers (UTI).\n    /// </param>\n    /// <returns>A new <see cref=\"DataFormat\"/>.</returns>\n    public static DataFormat<byte[]> CreateBytesPlatformFormat(string identifier)\n        => CreatePlatformFormat<byte[]>(identifier);\n\n    /// <summary>\n    /// Creates a new format for the current platform that returns a <see cref=\"string\"/>.\n    /// </summary>","sourceCodeStart":143,"sourceCodeEnd":179,"githubUrl":"https://github.com/AvaloniaUI/Avalonia/blob/11c542726898ae954a1ef668c65ec79ec92ab17d/src/Avalonia.Base/Input/DataFormat.cs#L143-L179","documentation":"CreateApplicationFormat builds a cross-app-recognizable DataFormat and validates the identifier via IsValidApplicationFormatIdentifier (must be non-empty and contain only valid chars). An invalid identifier is rejected with ArgumentException because the platform name must be parseable/distinguishable.","triggerScenarios":"Calling DataFormat.CreateStringApplicationFormat / CreateBytesApplicationFormat (which route to CreateApplicationFormat) with an empty string or a string containing characters failing IsValidChar (e.g. whitespace, punctuation, or control chars).","commonSituations":"Generating format identifiers from user input or app metadata that includes disallowed characters. Passing null/empty from a config default.","solutions":["Use a simple identifier of alphanumerics/allowed chars only (typically letters, digits, underscores, dots, hyphens).","Sanitize input before creating the format.","Validate non-empty first (CreateInProcessFormat already calls ThrowIfNullOrEmpty; for application formats, ensure a clean identifier)."],"exampleFix":"// before:\nvar f = DataFormat.CreateStringApplicationFormat(\"\"); // throws\n// or with bad chars:\nvar f = DataFormat.CreateStringApplicationFormat(\"my format!\"); // throws\n\n// after:\nvar f = DataFormat.CreateStringApplicationFormat(\"my-format\");","handlingStrategy":"validation","validationCode":"if (!string.IsNullOrEmpty(identifier) && identifier.All(IsValidChar))\n    DataFormat.CreateStringApplicationFormat(identifier);","typeGuard":"static bool IsValidApplicationId(string s) => !string.IsNullOrEmpty(s) && s.All(IsValidChar); // mirror IsValidApplicationFormatIdentifier","tryCatchPattern":null,"preventionTips":["Use alphanumerics and simple separators (.-_) in identifiers.","Sanitize user-derived identifiers before creating formats.","Reject empty identifiers upstream."],"tags":["dataformat","validation","argument","clipboard"],"backgroundTag":null,"analyzedSha":"11c542726898ae954a1ef668c65ec79ec92ab17d","analyzedAt":"2026-08-13T11:57:40.261Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}