[Mono-bugs] [Bug 55793][Wis] New - Assertion Failure in reflection.c at line line 6210

bugzilla-daemon@bugzilla.ximian.com bugzilla-daemon@bugzilla.ximian.com
Fri, 19 Mar 2004 02:49:16 -0500 (EST)


Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by nvineeth@yahoo.com.

http://bugzilla.ximian.com/show_bug.cgi?id=55793

--- shadow/55793	2004-03-19 02:49:16.000000000 -0500
+++ shadow/55793.tmp.4707	2004-03-19 02:49:16.000000000 -0500
@@ -0,0 +1,751 @@
+Bug#: 55793
+Product: Mono: Runtime
+Version: unspecified
+OS: Red Hat 9.0
+OS Details: 
+Status: NEW   
+Resolution: 
+Severity: Unknown
+Priority: Wishlist
+Component: misc
+AssignedTo: mono-bugs@ximian.com                            
+ReportedBy: nvineeth@yahoo.com               
+QAContact: mono-bugs@ximian.com
+TargetMilestone: ---
+URL: 
+Summary: Assertion Failure in reflection.c at line line 6210 
+
+Please fill in this template when reporting a bug, unless you know what you
+are doing.
+
+Description of Problem:
+
+i got this failure when i ran the test case for
+System.Reflection.Emit.CustomAttributeBuilder.
+
+The error message looks like this:
+
+..F.F.F.F.F.F.F.
+** ERROR **: file reflection.c: line 6210
+(mono_reflection_get_custom_attrs_blob): assertion failed:
+(mono_array_length (ctorArgs) == sig->param_count)
+aborting...
+./run_test.sh: line 26: 11666 Aborted                 MONO_PATH=$MONO_PATH
+mono --debug ${NUNITCONSOLE} ../corlib_test.dll $fixture
+
+----------------------------------------------------------
+
+// CustomAttributeBuilderTest.cs
+//
+// Author: Vineeth N <nvineeth@yahoo.com>
+//
+// (C) 2004 Ximian, Inc. http://www.ximian.com
+//
+using System;
+using System.Reflection;
+using System.Reflection.Emit;
+using System.Threading;
+using NUnit.Framework;
+
+namespace MonoTests.System.Reflection.Emit
+{
+	/// <summary>
+	/// TestFixture for CustomAttributeBuilderTest.
+	/// The members to be tested are as follows:
+	/// 4 constructors:
+	/// 1) public CustomAttributeBuilder(ConstructorInfo, object[]);
+	/// 2) public CustomAttributeBuilder(ConstructorInfo, object[],
+FieldInfo[], object[]);
+	/// 3) public CustomAttributeBuilder(ConstructorInfo, object[],
+PropertyInfo[], object[]);
+	/// 4) public CustomAttributeBuilder(ConstructorInfo, object[],
+PropertyInfo[], object[], FieldInfo[], object[]);
+	/// and the exceptions that are thrown.
+	/// In the implementation , it can be seen that the first
+	/// three type of  constructors call the 4th type of ctor, which takes 6 args
+	/// by filling args and substituting null as required.
+	/// For testing constructors we have use 4 different test functions,
+	/// Various exceptions have been checked for 4th type of consturctor.
+	/// </summary>
+
+	[TestFixture]
+	public class CustomAttributeBuilderTest : Assertion
+	{
+		
+		// the CustomAttribute class is used for testing and it has to be public
+		//since it will be associated with a class that belongs to another assembly 
+
+		[AttributeUsage(AttributeTargets.Method | AttributeTargets.Field |
+AttributeTargets.Class)]
+		public class CustomAttribute: Attribute
+		{
+			private string attr1;
+			private string attr2;
+			public string Feild; //used for testing the second type of constructor
+
+			public CustomAttribute(){}
+			public CustomAttribute( String s1 , String s2)
+			{
+				attr1 = s1;
+				attr2=s2;
+            }
+
+			private CustomAttribute( String s1){}
+			static CustomAttribute(){}
+			public string AttributeOne
+			{
+				get{return attr1;}
+				set{attr1 = value;}
+			}
+			
+			public string AttributeTwo
+			{
+				get{ return attr2; }
+				//the set is skipped and is used later in testing
+			}
+
+		}
+		
+		private class TempClass
+		{
+			//used for testing the ArgumentException
+			public string Field;
+			public string FieldProperty
+			{
+				get{ return Field; }
+				set{ Field = value; }
+			}
+		}
+
+		
+
+		
+		[Test]
+		public void CtorOneTest()
+		{
+			//test for the constructor with signature--
+			// public CustomAttributeBuilder(ConstructorInfo, object[]);
+			/*
+			 * WE build a imaginary type as follows
+			 * class TestType
+			 * {
+			 *	[CustomAttribute("one","two")]
+			 *	public string Str;
+			 * 
+			 *	[CustomAttribute("hello","world")]
+			 *	public void Print()
+			 *	{Console.WriteLine("Hello World"); }
+			 * 
+			 * }
+			 * And then check for the validity of attributes in the test functions
+			 */
+			AssemblyName asmName = new AssemblyName();
+			asmName.Name = "TestAssembly.dll";
+
+			AssemblyBuilder asmBuilder = Thread.GetDomain().DefineDynamicAssembly(
+				asmName , AssemblyBuilderAccess.Run);
+			
+			ModuleBuilder modBuilder = asmBuilder.DefineDynamicModule("TestModule");
+			
+			TypeBuilder typeBuilder = modBuilder.DefineType("TestType",
+				TypeAttributes.Public);
+
+			Type[] ctorParams = new Type[] { typeof(string),typeof(string) };
+			
+			ConstructorInfo classCtorInfo = 
+				typeof(CustomAttribute).GetConstructor(ctorParams);
+
+			CustomAttributeBuilder feildCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				new object[] { "one","two" }
+				) 
+				,
+				methodCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				new object[] {"hello","world"}
+				);
+			//now let's build a feild of type string and associate a attribute with it
+			FieldBuilder fieldBuilder= typeBuilder.DefineField("Str",
+				typeof(string),FieldAttributes.Public);
+			fieldBuilder.SetCustomAttribute(feildCABuilder);
+			//now build a method 
+			MethodBuilder methodBuilder= typeBuilder.DefineMethod("Print",
+				MethodAttributes.Public,null,null);
+			methodBuilder.SetCustomAttribute(methodCABuilder);
+			ILGenerator methodIL = methodBuilder.GetILGenerator();
+			methodIL.EmitWriteLine("Hello, world!");
+			methodIL.Emit(OpCodes.Ret);
+			
+			// create the type
+			Type myType = typeBuilder.CreateType();
+
+			//Now check for the validity of the attributes.
+			object testInstance = Activator.CreateInstance(myType);
+
+			//check the validity of the attribute associated with Print method 
+			
+			object []methodAttrs = 
+myType.GetMember("Print")[0].GetCustomAttributes(true);
+			AssertEquals("#method Print has exactly one
+attribute",methodAttrs.Length,1);
+			CustomAttribute methodAttr = methodAttrs[0] as CustomAttribute;
+			AssertEquals("#AttributeOne", methodAttr.AttributeOne , "hello");
+			AssertEquals("#AttributeTwo", methodAttr.AttributeTwo , "world");
+			
+			//check the validity of the attribute associated with Str feild
+
+			object[] fieldAttrs = myType.GetField("Str").GetCustomAttributes(true);
+			AssertEquals("#feild Str has exactly one attribute",fieldAttrs.Length,1);
+			CustomAttribute fieldAttr = fieldAttrs[0] as CustomAttribute;
+			AssertEquals("#AttributeOne", fieldAttr.AttributeOne , "one");
+			AssertEquals("#AttributeTwo", fieldAttr.AttributeTwo , "two");
+					
+		}
+
+		[Test]
+		public void CtorTwoTest()
+		{
+			//test for the constructor with signature--
+			// CustomAttributeBuilder Constructor (ConstructorInfo, Object[],
+FieldInfo[], Object[]) ;
+			/*
+			 * WE build a imaginary type as follows
+			 * [CustomAttribute("Test","Type")]
+			 * public class TestType
+			 * {
+			 * 
+			 * }
+			 * We also set the "Feild" of class CustomAttribute and the value;
+			 * And then check for the validity of attributes in the test functions
+			 */
+									
+			AssemblyName asmName = new AssemblyName();
+			asmName.Name = "TestAssembly.dll";
+
+			AssemblyBuilder asmBuilder = Thread.GetDomain().DefineDynamicAssembly(
+				asmName , AssemblyBuilderAccess.Run);
+			
+			ModuleBuilder modBuilder = asmBuilder.DefineDynamicModule("TestModule");
+			
+			TypeBuilder typeBuilder = modBuilder.DefineType("TestType",
+				TypeAttributes.Public);
+
+			Type[] ctorParams = new Type[] { typeof(string),typeof(string) };
+			
+			ConstructorInfo classCtorInfo = 
+				typeof(CustomAttribute).GetConstructor(ctorParams);
+
+			CustomAttributeBuilder typeCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				new object[] { "Test","Type" },
+				typeof(CustomAttribute).GetFields(),
+				new object[] {"TestCase"}
+				); 
+				
+			typeBuilder.SetCustomAttribute(typeCABuilder);
+			
+			// create the type
+			Type myType = typeBuilder.CreateType();
+
+			//Now check for the validity of the attributes.
+			object testInstance = Activator.CreateInstance(myType);
+
+			//check the validity of the attribute associated with Print method 
+			object[] customAttrs = myType.GetCustomAttributes(true);
+			AssertEquals("#TestType has exactly one attribute",customAttrs.Length , 1);
+
+			//Custom Attributes of TestType
+			CustomAttribute attr = customAttrs[0] as CustomAttribute;
+			AssertEquals("#AttributeOne", attr.AttributeOne , "Test");
+			AssertEquals("#AttributeTwo", attr.AttributeTwo , "Type");
+			AssertEquals("#CustomAttribute.Feild",attr.Feild , "TestCase");
+
+		}
+
+		[Test]
+		public void CtorThreeTest()
+		{
+			//test for the constructor with signature--
+			// CustomAttributeBuilder Constructor (ConstructorInfo, Object[],
+PropertyInfo[], Object[]) ;
+			/*
+			 * WE build a imaginary type as follows
+			 * [CustomAttribute()]
+			 * public class TestType
+			 * {
+			 * 
+			 * }
+			 * We also set the "AttributeOne" of class CustomAttribute by means of
+the constuctor
+			 * And then check for the validity of attribute state 
+			 */
+			
+			AssemblyName asmName = new AssemblyName();
+			asmName.Name = "TestAssembly.dll";
+
+			AssemblyBuilder asmBuilder = Thread.GetDomain().DefineDynamicAssembly(
+				asmName , AssemblyBuilderAccess.Run);
+			
+			ModuleBuilder modBuilder = asmBuilder.DefineDynamicModule("TestModule");
+			
+			TypeBuilder typeBuilder = modBuilder.DefineType("TestType",
+				TypeAttributes.Public);
+								
+			Type[] ctorParams = new Type[] { };
+			
+			ConstructorInfo classCtorInfo = 
+				typeof(CustomAttribute).GetConstructor(ctorParams);
+
+			CustomAttributeBuilder typeCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				new object[] { },
+				new PropertyInfo[]{ typeof(CustomAttribute).GetProperty("AttributeOne") },
+				new object[] {"TestCase"}
+				); 
+				
+			typeBuilder.SetCustomAttribute(typeCABuilder);
+			
+			// create the type
+			Type myType = typeBuilder.CreateType();
+
+			//Now check for the validity of the attributes.
+			object testInstance = Activator.CreateInstance(myType);
+
+			//check the validity of the attribute associated with Print method 
+			object[] customAttrs = myType.GetCustomAttributes(true);
+			AssertEquals("#TestType has exactly one attribute",customAttrs.Length , 1);
+
+			//Custom Attributes of TestType
+			CustomAttribute attr = customAttrs[0] as CustomAttribute;
+			AssertEquals("#AttributeOne", attr.AttributeOne , "TestCase");
+		}
+
+		[Test]
+		public void CtorFourTest()
+		{
+			//test for the constructor with signature--
+			//public CustomAttributeBuilder(ConstructorInfo, object[],
+PropertyInfo[], object[], FieldInfo[], object[]);
+			/*
+			 * WE build a imaginary type as follows
+			 * [CustomAttribute()]
+			 * public class TestType
+			 * {
+			 * 
+			 * }
+			 * We also set the "AttributeOne" property ,
+			 * and "Feild" of class CustomAttribute 
+			 * by means of the constuctor of CustomAttributeBuilder
+			 * And then check for the validity 
+			 */
+					
+			AssemblyName asmName = new AssemblyName();
+			asmName.Name = "TestAssembly.dll";
+
+			AssemblyBuilder asmBuilder = Thread.GetDomain().DefineDynamicAssembly(
+				asmName , AssemblyBuilderAccess.Run);
+			
+			ModuleBuilder modBuilder = asmBuilder.DefineDynamicModule("TestModule");
+			
+			TypeBuilder typeBuilder = modBuilder.DefineType("TestType",
+				TypeAttributes.Public);
+		
+			Type[] ctorParams = new Type[] { };
+			
+			ConstructorInfo classCtorInfo = 
+				typeof(CustomAttribute).GetConstructor(ctorParams);
+
+			CustomAttributeBuilder typeCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				new object[] { },
+				new PropertyInfo[]{ typeof(CustomAttribute).GetProperty("AttributeOne") },
+				new object[] {"TestCase"},
+				typeof(CustomAttribute).GetFields(),
+				new object[]{"FieldValue"}
+				); 
+				
+			typeBuilder.SetCustomAttribute(typeCABuilder);
+			
+			// create the type
+			Type myType = typeBuilder.CreateType();
+
+			//Now check for the validity of the attributes.
+			object testInstance = Activator.CreateInstance(myType);
+
+			//check the validity of the attribute associated with Print method 
+			object[] customAttrs = myType.GetCustomAttributes(true);
+			AssertEquals("#TestType has exactly one attribute",customAttrs.Length , 1);
+
+			//Custom Attributes of TestType
+			CustomAttribute attr = customAttrs[0] as CustomAttribute;
+			AssertEquals("#AttributeOne", attr.AttributeOne , "TestCase");
+			AssertEquals("#Field ", attr.Feild , "FieldValue");
+		}
+	
+		
+		[Test]
+		[ExpectedException( typeof(ArgumentException))]
+		public void ArgumentExceptionTest_1()
+		{
+			//here the constructor is static 
+					
+			Type[] ctorParams = new Type[] { };
+			
+			ConstructorInfo classCtorInfo = 
+			
+typeof(CustomAttribute).GetConstructor(BindingFlags.Static|BindingFlags.NonPublic,null,ctorParams,null);
+
+			CustomAttributeBuilder typeCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				new object[] { },
+				new PropertyInfo[]{ typeof(CustomAttribute).GetProperty("AttributeOne") },
+				new object[] {"TestCase"},
+				typeof(CustomAttribute).GetFields(),
+				new object[]{"FieldValue"}
+				); 
+				
+			
+		}
+
+		
+		[Test]
+		[ExpectedException( typeof(ArgumentException))]
+		public void ArgumentExceptionTest_2()
+		{
+			//here the consturctor is private
+					
+			Type[] ctorParams = new Type[] {typeof(string) };
+			
+			ConstructorInfo classCtorInfo = 
+			
+typeof(CustomAttribute).GetConstructor(BindingFlags.Instance|BindingFlags.NonPublic,null,ctorParams,null);
+
+			Assert("#Custom Attribute has private constuctor ",classCtorInfo!=null);
+
+			CustomAttributeBuilder typeCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				new object[] {"hello"},
+				new PropertyInfo[]{ typeof(CustomAttribute).GetProperty("AttributeOne") },
+				new object[] {"TestCase"},
+				typeof(CustomAttribute).GetFields(),
+				new object[]{"FieldValue"}
+				); 
+				
+			
+		}
+
+		
+		[Test]
+		[ExpectedException( typeof(ArgumentException))]
+		public void ArgumentExceptionTest_3()
+		{
+			// The lengths of the namedProperties and 
+			//propertyValues arrays are different. 
+			
+			Type[] ctorParams = new Type[] { };
+			
+			ConstructorInfo classCtorInfo = 
+				typeof(CustomAttribute).GetConstructor(ctorParams);
+
+			CustomAttributeBuilder typeCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				new object[] { },
+				new PropertyInfo[]{ typeof(CustomAttribute).GetProperty("AttributeOne") },
+				new object[] {"TestCase","extra arg"},//<--here is the error
+				typeof(CustomAttribute).GetFields(),
+				new object[]{"FieldValue"}
+				); 
+			
+		}
+
+
+		[Test]
+		[ExpectedException( typeof(ArgumentException))]
+		public void ArgumentExceptionTest_4()
+		{
+			//The length of the namedFields and
+			//namedValues are different 
+			
+			Type[] ctorParams = new Type[] { };
+			
+			ConstructorInfo classCtorInfo = 
+				typeof(CustomAttribute).GetConstructor(ctorParams);
+
+			CustomAttributeBuilder typeCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				new object[] { },
+				new PropertyInfo[]{ typeof(CustomAttribute).GetProperty("AttributeOne") },
+				new object[] {"TestCase"},
+				typeof(CustomAttribute).GetFields(),
+				new object[]{}//<--here is the error
+				); 
+			
+		}
+
+
+		[Test]
+		[ExpectedException( typeof(ArgumentException))]
+		public void ArgumentExceptionTest_5()
+		{
+			//The number of supplied arguments does not match 
+			//the number of parameters of the constructor as 
+			//required by the calling convention of the constructor
+			
+			Type[] ctorParams = new Type[] { };
+			
+			ConstructorInfo classCtorInfo = 
+				typeof(CustomAttribute).GetConstructor(ctorParams);
+
+			CustomAttributeBuilder typeCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				new object[] {"extra1","extra2" },//<--here is the error
+				new PropertyInfo[]{ typeof(CustomAttribute).GetProperty("AttributeOne") },
+				new object[] {"TestCase"},
+				typeof(CustomAttribute).GetFields(),
+				new object[]{"FeildValue"}
+				); 
+			
+		}
+
+
+		[Test]
+		[ExpectedException( typeof(ArgumentException))]
+		public void ArgumentExceptionTest_6()
+		{
+			//The type of supplied argument does not
+			//match the type of the parameter declared 
+			//in the constructor.
+			
+			Type[] ctorParams = new Type[] {typeof(string),typeof(string) };
+			
+			ConstructorInfo classCtorInfo = 
+				typeof(CustomAttribute).GetConstructor(ctorParams);
+
+			CustomAttributeBuilder typeCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				new object[] {"1",123 },//<--here is the error,(int instead of string)
+				new PropertyInfo[]{ typeof(CustomAttribute).GetProperty("AttributeOne") },
+				new object[] {"TestCase"},
+				typeof(CustomAttribute).GetFields(),
+				new object[]{"FeildValue"}
+				); 
+			
+		}
+
+
+		[Test]
+		[ExpectedException( typeof(ArgumentException))]
+		public void ArgumentExceptionTest_7()
+		{
+			//A property has no setter.(CustomAttribute.AttributeTwo)
+						
+			Type[] ctorParams = new Type[] {typeof(string),typeof(string) };
+			
+			ConstructorInfo classCtorInfo = 
+				typeof(CustomAttribute).GetConstructor(ctorParams);
+
+			CustomAttributeBuilder typeCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				new object[] {"1","2" },
+				new PropertyInfo[]{ typeof(CustomAttribute).GetProperty("AttributeTwo") },
+				new object[] {"TestCase"},
+				typeof(CustomAttribute).GetFields(),
+				new object[]{"FeildValue"}
+				); 
+			
+		}
+
+
+		[Test]
+		[ExpectedException( typeof(ArgumentException))]
+		public void ArgumentExceptionTest_8()
+		{
+			//A property doesnot belong to same class
+			
+			Type[] ctorParams = new Type[] {typeof(string),typeof(string) };
+			
+			ConstructorInfo classCtorInfo = 
+				typeof(CustomAttribute).GetConstructor(ctorParams);
+
+			CustomAttributeBuilder typeCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				new object[] {"1","2" },
+				new
+PropertyInfo[]{typeof(TempClass).GetProperty("FieldProperty")},//here is
+the erro
+				new object[] {"TestCase"},
+				typeof(CustomAttribute).GetFields(),
+				new object[]{"FeildValue"}
+				); 
+			
+		}
+
+
+		[Test]
+		[ExpectedException( typeof(ArgumentException))]
+		public void ArgumentExceptionTest_9()
+		{
+			//A field doesnot belong to same class
+			
+			Type[] ctorParams = new Type[] {typeof(string),typeof(string) };
+			
+			ConstructorInfo classCtorInfo = 
+				typeof(CustomAttribute).GetConstructor(ctorParams);
+
+			CustomAttributeBuilder typeCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				new object[] {"1","2" },
+				new PropertyInfo[]{ typeof(CustomAttribute).GetProperty("AttributeOne") },
+				new object[] {"TestCase"},
+				typeof(TempClass).GetFields(),//<-- fields of TempClass are passed
+				new object[]{"FeildValue"}
+				); 
+			
+		}
+
+
+		[Test]
+		[ExpectedException( typeof(ArgumentException))]
+		public void ArgumentExceptionTest_10()
+		{
+			//The types of the property values do 
+			//not match the types of the named properties.
+			
+					
+			Type[] ctorParams = new Type[] {typeof(string),typeof(string) };
+			
+			ConstructorInfo classCtorInfo = 
+				typeof(CustomAttribute).GetConstructor(ctorParams);
+
+			CustomAttributeBuilder typeCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				new object[] {"1","2" },
+				new PropertyInfo[]{ typeof(CustomAttribute).GetProperty("AttributeOne") },
+				new object[] {(long)1212121212},//<---type mismatch error(long for string)
+				typeof(CustomAttribute).GetFields(),
+				new object[]{"FeildValue"}
+				); 
+			
+		}
+
+
+		[Test]
+		[ExpectedException( typeof(ArgumentException))]
+		public void ArgumentExceptionTest_11()
+		{
+			//The types of the field values do 
+			//not match the types of the named properties.
+			
+			Type[] ctorParams = new Type[] {typeof(string),typeof(string) };
+			
+			ConstructorInfo classCtorInfo = 
+				typeof(CustomAttribute).GetConstructor(ctorParams);
+
+			Assert("#ctor not null",classCtorInfo!=null);
+			CustomAttributeBuilder typeCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				new object[] {"1","2" },
+				new PropertyInfo[]{ typeof(CustomAttribute).GetProperty("AttributeOne") },
+				new object[] {"One"},
+				typeof(CustomAttribute).GetFields(),
+				new object[]{12.1212}//<---type mismatch error(double for string)
+				); 
+			
+		}
+
+
+		[Test]
+		[ExpectedException(typeof(ArgumentNullException))]
+		public void ArgumentNullException_1()
+		{
+			//the ctor value array (2nd argument) is null
+			Type[] ctorParams = new Type[] {typeof(string),typeof(string) };
+			
+			ConstructorInfo classCtorInfo = 
+				typeof(CustomAttribute).GetConstructor(ctorParams);
+
+			Assert("#ctor not null",classCtorInfo!=null);
+			CustomAttributeBuilder typeCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				null,//<-- here is the error
+				new PropertyInfo[]{ typeof(CustomAttribute).GetProperty("AttributeOne") },
+				new object[] {"One"},
+				typeof(CustomAttribute).GetFields(),
+				new object[]{"feild"}
+				); 
+
+		}
+
+
+		[Test]
+		[ExpectedException(typeof(ArgumentNullException))]
+		public void ArgumentNullException_2()
+		{
+			//the property value array (4th argument) is null
+			Type[] ctorParams = new Type[] {typeof(string),typeof(string) };
+			
+			ConstructorInfo classCtorInfo = 
+				typeof(CustomAttribute).GetConstructor(ctorParams);
+
+			Assert("#ctor not null",classCtorInfo!=null);
+			CustomAttributeBuilder typeCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				new object[]{"one","two"},
+				new PropertyInfo[]{ typeof(CustomAttribute).GetProperty("AttributeOne") },
+				null,//<-- here is the error
+				typeof(CustomAttribute).GetFields(),
+				new object[]{"feild"}
+				); 
+
+		}
+
+
+		[Test]
+		[ExpectedException(typeof(ArgumentNullException))]
+		public void ArgumentNullException_3()
+		{
+			//the field value array (6th argument) is null
+			Type[] ctorParams = new Type[] {typeof(string),typeof(string) };
+			
+			ConstructorInfo classCtorInfo = 
+				typeof(CustomAttribute).GetConstructor(ctorParams);
+
+			Assert("#ctor not null",classCtorInfo!=null);
+			CustomAttributeBuilder typeCABuilder = new CustomAttributeBuilder(
+				classCtorInfo,
+				new object[]{"one","two"},
+				new PropertyInfo[]{ typeof(CustomAttribute).GetProperty("AttributeOne") },
+				new object[]{"property"},
+				typeof(CustomAttribute).GetFields(),
+				null//<-- here is the error
+				); 
+
+		}
+	}
+}
+
+
+Steps to reproduce the problem:
+1. place the test case in corlib/Test/System.Reflection.Emit
+2. then " make test " in mcs subfolder and do some changes to
+corlib/Test/run_test.sh
+3. ./run_test.sh System.Reflection.Emit.CustomAttributeBuilderTest
+
+Actual Results:
+
+..F.F.F.F.F.F.F.
+** ERROR **: file reflection.c: line 6210
+(mono_reflection_get_custom_attrs_blob): assertion failed:
+(mono_array_length (ctorArgs) == sig->param_count)
+aborting...
+./run_test.sh: line 26: 11666 Aborted                 MONO_PATH=$MONO_PATH
+mono --debug ${NUNITCONSOLE} ../corlib_test.dll $fixture
+
+Expected Results:
+
+This test case ran successfully on .NET 1.1
+
+How often does this happen? 
+I tried after an anonymous cvs update, the problem persists
+
+Additional Information: