@@ -17,7 +17,7 @@ namespace Microsoft.AspNetCore.DataProtection.XmlEncryption;
17
17
internal static unsafe class XmlEncryptionExtensions
18
18
{
19
19
// Used for testing edge case assembly loading errors
20
- internal static Func < string , Type > _getType = name => Type . GetType ( name , throwOnError : false ) ;
20
+ internal static Func < string , Type ? > _getType = name => Type . GetType ( name , throwOnError : false ) ;
21
21
22
22
public static XElement DecryptElement ( this XElement element , IActivator activator )
23
23
{
@@ -73,10 +73,10 @@ public static XElement DecryptElement(this XElement element, IActivator activato
73
73
[ UnconditionalSuppressMessage ( "Trimmer" , "IL2057" , Justification = "Type.GetType result is only useful with types that are referenced by DataProtection assembly." ) ]
74
74
private static IXmlDecryptor CreateDecryptor ( IActivator activator , string decryptorTypeName )
75
75
{
76
- var resolvedTypeName = TypeForwardingActivator . TryForwardTypeName ( decryptorTypeName , out var forwardedTypeName )
77
- ? forwardedTypeName
78
- : decryptorTypeName ;
79
- var type = _getType ( resolvedTypeName ) ;
76
+ if ( ! TryGetDecryptorType ( decryptorTypeName , out var type ) )
77
+ {
78
+ return activator . CreateInstance < IXmlDecryptor > ( decryptorTypeName ) ;
79
+ }
80
80
81
81
if ( type == typeof ( DpapiNGXmlDecryptor ) )
82
82
{
@@ -98,6 +98,23 @@ private static IXmlDecryptor CreateDecryptor(IActivator activator, string decryp
98
98
return activator . CreateInstance < IXmlDecryptor > ( decryptorTypeName ) ;
99
99
}
100
100
101
+ private static bool TryGetDecryptorType ( string decryptorTypeName , [ NotNullWhen ( true ) ] out Type ? type )
102
+ {
103
+ var resolvedTypeName = TypeForwardingActivator . TryForwardTypeName ( decryptorTypeName , out var forwardedTypeName )
104
+ ? forwardedTypeName
105
+ : decryptorTypeName ;
106
+ try
107
+ {
108
+ type = _getType ( resolvedTypeName ) ;
109
+ return type is not null ;
110
+ }
111
+ catch
112
+ {
113
+ type = default ;
114
+ return false ;
115
+ }
116
+ }
117
+
101
118
public static XElement ? EncryptIfNecessary ( this IXmlEncryptor encryptor , XElement element )
102
119
{
103
120
// If no encryption is necessary, return null.
0 commit comments