[xBuild] Support use of properties defined in Choose elements in project references
[mono.git] / mono / tests / coreclr-security.cs
index 93796c9880a937172953a74e6d5b56a74df0e2f5..89ad2c1a3f8ad2904821fc848c0dd10ecfe8773f 100644 (file)
@@ -273,6 +273,68 @@ public class Test
        [DllImport ("/lib64/libc.so.6")]
        static extern int getpid ();
 
+
+       static void ArraysCreatedByTransparentCaller ()
+       {
+               // Transparent creating an array of a Critical type
+               // using Class[] (rank == 1) throws a TypeLoadException on SL2 - but that looks like a bug
+               // reported as https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=490406
+               CClass[] c_array = new CClass [0];
+               // Transparent creating an array of a SafeCritical type
+               SCClass[] sc_array = new SCClass [0];
+
+               // Transparent creating a multidimentional array of a Critical type
+               CClass[,] c_multi = new CClass [0,0];
+               // Transparent creating a multidimentional array of a SafeCritical type
+               SCClass[,] sc_multi = new SCClass [0,0];
+
+               // Transparent creating a jagged array of a Critical type
+               CClass[][] c_jagged = new CClass [0][];
+               // Transparent creating a jagged array of a Critical type
+               SCClass[][] sc_jagged = new SCClass [0][];
+       }
+
+       [SecuritySafeCritical]
+       static void ArraysCreatedBySafeCriticalCaller ()
+       {
+               // SafeCritical creating an array of a Critical type
+               CClass[] c_array = new CClass [0];
+               // SafeCritical creating an array of a SafeCritical type
+               SCClass[] sc_array = new SCClass [0];
+
+               // SafeCritical creating a multidimentional array of a Critical type
+               CClass[,] c_multi = new CClass [0,0];
+               // SafeCritical creating a multidimentional array of a SafeCritical type
+               SCClass[,] sc_multi = new SCClass [0,0];
+
+               // SafeCritical creating a jagged array of a Critical type
+               CClass[][] c_jagged = new CClass [0][];
+               // SafeCritical creating a jagged array of a Critical type
+               SCClass[][] sc_jagged = new SCClass [0][];
+
+               // Transparent Main could not call a critical method by itself
+               ArraysCreatedByCriticalCaller ();
+       }
+
+       [SecurityCritical]
+       static void ArraysCreatedByCriticalCaller ()
+       {
+               // Critical creating an array of a Critical type
+               CClass[] c_array = new CClass [0];
+               // Critical creating an array of a SafeCritical type
+               SCClass[] sc_array = new SCClass [0];
+
+               // Critical creating a multidimentional array of a Critical type
+               CClass[,] c_multi = new CClass [0,0];
+               // Critical creating a multidimentional array of a SafeCritical type
+               SCClass[,] sc_multi = new SCClass [0,0];
+
+               // Critical creating a jagged array of a Critical type
+               CClass[][] c_jagged = new CClass [0][];
+               // Critical creating a jagged array of a Critical type
+               SCClass[][] sc_jagged = new SCClass [0][];
+       }
+
        public static int Main ()
        {
                SCMethod ();
@@ -404,6 +466,11 @@ public class Test
                }
                new SafeInheritFromSafeCriticalDefaultConstructor ();
 
+               // arrays creation tests
+               ArraysCreatedByTransparentCaller ();
+               ArraysCreatedBySafeCriticalCaller ();
+               // the above also calls ArraysCreatedBySafeCriticalCaller since (Transparent) Main cannot call it directly
+
                if (haveError)
                        return 1;