[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 ();
}
new SafeInheritFromSafeCriticalDefaultConstructor ();
+ // arrays creation tests
+ ArraysCreatedByTransparentCaller ();
+ ArraysCreatedBySafeCriticalCaller ();
+ // the above also calls ArraysCreatedBySafeCriticalCaller since (Transparent) Main cannot call it directly
+
if (haveError)
return 1;