Merge pull request #5313 from lambdageek/corefx-sre-fixup
authorAleksey Kliger (λgeek) <akliger@gmail.com>
Mon, 7 Aug 2017 15:58:50 +0000 (11:58 -0400)
committerGitHub <noreply@github.com>
Mon, 7 Aug 2017 15:58:50 +0000 (11:58 -0400)
[sre] Fix some argument checks, enable xtests

mcs/class/corlib/System.Reflection.Emit/ConstructorBuilder.cs
mcs/class/corlib/System.Reflection.Emit/CustomAttributeBuilder.cs
mcs/class/corlib/System.Reflection.Emit/FieldBuilder.cs
mcs/class/corlib/System.Reflection.Emit/MethodBuilder.cs
mcs/class/corlib/System.Reflection.Emit/ModuleBuilder.cs
mcs/class/corlib/Test/System.Reflection.Emit/ConstructorBuilderTest.cs
mcs/class/corlib/corlib_xtest.dll.sources

index 55a392d38442814419e937fdb4088f2f3bd8b526..7b77a70194e0ba6b535e858fb3bb269108e36d57 100644 (file)
@@ -235,7 +235,10 @@ namespace System.Reflection.Emit {
 
                public ParameterBuilder DefineParameter (int iSequence, ParameterAttributes attributes, string strParamName)
                {
-                       if (iSequence < 1 || iSequence > GetParametersCount ())
+                       // The 0th ParameterBuilder does not correspond to an
+                       // actual parameter, but .NETFramework lets you define
+                       // it anyway. It is not useful.
+                       if (iSequence < 0 || iSequence > GetParametersCount ())
                                throw new ArgumentOutOfRangeException ("iSequence");
                        if (type.is_created)
                                throw not_after_created ();
index f3302e02b9ce491b7e06f8c4dd78eb2f92f13896..0bb724ad8c4814072d58faef503bb278ccf42c91 100644 (file)
@@ -58,9 +58,13 @@ namespace System.Reflection.Emit {
                [MethodImplAttribute(MethodImplOptions.InternalCall)]
                static extern byte[] GetBlob(Assembly asmb, ConstructorInfo con, object[] constructorArgs, PropertyInfo[] namedProperties, object[] propertyValues, FieldInfo[] namedFields, object[] fieldValues);
                
-               internal CustomAttributeBuilder( ConstructorInfo con, byte[] cdata) {
+               internal CustomAttributeBuilder( ConstructorInfo con, byte[] binaryAttribute) {
+                       if (con == null)
+                               throw new ArgumentNullException ("con");
+                       if (binaryAttribute == null)
+                               throw new ArgumentNullException ("binaryAttribute");
                        ctor = con;
-                       data = (byte[])cdata.Clone ();
+                       data = (byte[])binaryAttribute.Clone ();
                        /* should we check that the user supplied data is correct? */
                }
                
index cd6a5a76487627767fbeea600afe85292bf43d6d..23f27ca17c2747c4306705adaa9fec54406872cd 100644 (file)
@@ -156,6 +156,9 @@ namespace System.Reflection.Emit {
                public void SetCustomAttribute (CustomAttributeBuilder customBuilder) {
                        RejectIfCreated ();
 
+                       if (customBuilder == null)
+                               throw new ArgumentNullException ("customBuilder");
+
                        string attrname = customBuilder.Ctor.ReflectedType.FullName;
                        if (attrname == "System.Runtime.InteropServices.FieldOffsetAttribute") {
                                byte[] data = customBuilder.Data;
@@ -202,6 +205,8 @@ namespace System.Reflection.Emit {
 
                public void SetOffset( int iOffset) {
                        RejectIfCreated ();
+                       if (iOffset < 0)
+                               throw new ArgumentException ("Negative field offset is not allowed");
                        offset = iOffset;
                }
 
index 8748f20aba2b1e998f751affb651e45a133172e3..8f09f0262b4435f648ae0fa66289d6c4e68e206b 100644 (file)
@@ -342,7 +342,7 @@ namespace System.Reflection.Emit
                        //
                        // Extension: Mono allows position == 0 for the return attribute
                        //
-                       if ((position < 0) || (position > parameters.Length))
+                       if ((position < 0) || parameters == null || (position > parameters.Length))
                                throw new ArgumentOutOfRangeException ("position");
 
                        ParameterBuilder pb = new ParameterBuilder (this, position, attributes, strParamName);
index 57064be3027b126630d841b5bf1deae4bd0a9620..f629f8a3861ddc3c34fbde7a97b08d0dfac464a6 100644 (file)
@@ -159,21 +159,28 @@ namespace System.Reflection.Emit {
                        if (data == null)
                                throw new ArgumentNullException ("data");
 
-                       FieldBuilder fb = DefineUninitializedData (name, data.Length, 
-                                                                                                          attributes | FieldAttributes.HasFieldRVA);
+                       var maskedAttributes = attributes & ~FieldAttributes.ReservedMask;
+                       FieldBuilder fb = DefineDataImpl (name, data.Length, maskedAttributes | FieldAttributes.HasFieldRVA);
                        fb.SetRVAData (data);
 
                        return fb;
                }
 
                public FieldBuilder DefineUninitializedData (string name, int size, FieldAttributes attributes)
+               {
+                       return DefineDataImpl (name, size, attributes & ~FieldAttributes.ReservedMask);
+               }
+
+               private FieldBuilder DefineDataImpl (string name, int size, FieldAttributes attributes)
                {
                        if (name == null)
                                throw new ArgumentNullException ("name");
+                       if (name == String.Empty)
+                               throw new ArgumentException ("name cannot be empty", "name");
                        if (global_type_created != null)
                                throw new InvalidOperationException ("global fields already created");
-                       if ((size <= 0) || (size > 0x3f0000))
-                               throw new ArgumentException ("size", "Data size must be > 0 and < 0x3f0000");
+                       if ((size <= 0) || (size >= 0x3f0000))
+                               throw new ArgumentException ("Data size must be > 0 and < 0x3f0000", null as string);
 
                        CreateGlobalType ();
 
index faaa55af818011dc11a4366367aa83c9d24ef25a..57e86fa647ce6d719139ba416d80b0295e0e28f8 100644 (file)
@@ -195,23 +195,20 @@ public class ConstructorBuilderTest
        }
 
        [Test]
-       [Category ("NotDotNet")] // https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=341439
        public void DefineParameter_Position_Zero ()
        {
+               // https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=341439
+               // https://msdn.microsoft.com/en-us/library/system.reflection.emit.constructorbuilder.defineparameter(v=vs.110).aspx
+               // "If you specify 0 (zero) for iSequence, this method returns
+               // a ParameterBuilder instead of throwing an exception. There
+               // is nothing useful that you can do with this
+               // ParameterBuilder."
+
                ConstructorBuilder cb = genClass.DefineConstructor (
                        0, 0, new Type [2] { typeof (int), typeof (int) });
 
-               try {
-                       cb.DefineParameter (0, ParameterAttributes.In, "param1");
-                       Assert.Fail ("#1");
-               } catch (ArgumentOutOfRangeException ex) {
-                       // Specified argument was out of the range of valid values
-                       Assert.AreEqual (typeof (ArgumentOutOfRangeException), ex.GetType (), "#2");
-                       Assert.IsNull (ex.ActualValue, "#3");
-                       Assert.IsNull (ex.InnerException, "#4");
-                       Assert.IsNotNull (ex.Message, "#5");
-                       Assert.IsNotNull (ex.ParamName, "#6");
-               }
+               var pb = cb.DefineParameter (0, ParameterAttributes.In, "param1");
+               Assert.IsNotNull (pb);
        }
 
        [Test]
index 8cfedf1a9f2663896563986a5868e764390df310..88d9315ab5c5770e1563b43fa6d03d820959090c 100644 (file)
@@ -8,7 +8,7 @@
 #../../../external/corefx/src/System.Reflection.Emit/tests/AssemblyBuilderTests.cs
 # ../../../external/corefx/src/System.Reflection.Emit/tests/
 
-#../../../external/corefx/src/System.Reflection.Emit/tests/ConstructorBuilder/ConstructorBuilderDefineParameter.cs
+../../../external/corefx/src/System.Reflection.Emit/tests/ConstructorBuilder/ConstructorBuilderDefineParameter.cs
 #../../../external/corefx/src/System.Reflection.Emit/tests/ConstructorBuilder/ConstructorBuilderGetILGenerator.cs
 ../../../external/corefx/src/System.Reflection.Emit/tests/ConstructorBuilder/ConstructorBuilderInitLocals.cs
 ../../../external/corefx/src/System.Reflection.Emit/tests/ConstructorBuilder/ConstructorBuilderSetCustomAttribute.cs
@@ -26,8 +26,8 @@
 
 ../../../external/corefx/src/System.Reflection.Emit/tests/FieldBuilder/FieldBuilderGetValue.cs
 #../../../external/corefx/src/System.Reflection.Emit/tests/FieldBuilder/FieldBuilderSetConstant.cs
-#../../../external/corefx/src/System.Reflection.Emit/tests/FieldBuilder/FieldBuilderSetCustomAttribute.cs
-#../../../external/corefx/src/System.Reflection.Emit/tests/FieldBuilder/FieldBuilderSetOffset.cs
+../../../external/corefx/src/System.Reflection.Emit/tests/FieldBuilder/FieldBuilderSetCustomAttribute.cs
+../../../external/corefx/src/System.Reflection.Emit/tests/FieldBuilder/FieldBuilderSetOffset.cs
 
 ../../../external/corefx/src/System.Reflection.Emit/tests/GenericTypeParameterBuilder/GenericTyepParameterBuilderSetBaseTypeConstraint.cs
 ../../../external/corefx/src/System.Reflection.Emit/tests/GenericTypeParameterBuilder/GenericTypeParameterBuilderGUID.cs
 ../../../external/corefx/src/System.Reflection.Emit/tests/GenericTypeParameterBuilder/GenericTypeParameterBuilderMakeByRefType.cs
 ../../../external/corefx/src/System.Reflection.Emit/tests/GenericTypeParameterBuilder/GenericTypeParameterBuilderMakeGenericType.cs
 ../../../external/corefx/src/System.Reflection.Emit/tests/GenericTypeParameterBuilder/GenericTypeParameterBuilderMakePointerType.cs
-#../../../external/corefx/src/System.Reflection.Emit/tests/GenericTypeParameterBuilder/GenericTypeParameterBuilderSetCustomAttribute.cs
+../../../external/corefx/src/System.Reflection.Emit/tests/GenericTypeParameterBuilder/GenericTypeParameterBuilderSetCustomAttribute.cs
 #../../../external/corefx/src/System.Reflection.Emit/tests/GenericTypeParameterBuilder/GenericTypeParameterBuilderSetGenericParameterAttributes.cs
 #../../../external/corefx/src/System.Reflection.Emit/tests/GenericTypeParameterBuilder/GenericTypeParameterBuilderSetInterfaceConstraints.cs
 
 ../../../external/corefx/src/System.Reflection.Emit/tests/MethodBuilder/MethodBuilderContainsGenericParameters.cs
 #../../../external/corefx/src/System.Reflection.Emit/tests/MethodBuilder/MethodBuilderDefineGenericParameters.cs
-#../../../external/corefx/src/System.Reflection.Emit/tests/MethodBuilder/MethodBuilderDefineParameter.cs
+../../../external/corefx/src/System.Reflection.Emit/tests/MethodBuilder/MethodBuilderDefineParameter.cs
 #../../../external/corefx/src/System.Reflection.Emit/tests/MethodBuilder/MethodBuilderEquals.cs
 ../../../external/corefx/src/System.Reflection.Emit/tests/MethodBuilder/MethodBuilderGetGenericArguments.cs
 ../../../external/corefx/src/System.Reflection.Emit/tests/MethodBuilder/MethodBuilderGetGenericMethodDefinition.cs
@@ -60,9 +60,9 @@
 
 ../../../external/corefx/src/System.Reflection.Emit/tests/ModuleBuilder/ModuleBuilderCreateGlobalFunctions.cs
 #../../../external/corefx/src/System.Reflection.Emit/tests/ModuleBuilder/ModuleBuilderDefineEnum.cs
-#../../../external/corefx/src/System.Reflection.Emit/tests/ModuleBuilder/ModuleBuilderDefineInitializedData.cs
+../../../external/corefx/src/System.Reflection.Emit/tests/ModuleBuilder/ModuleBuilderDefineInitializedData.cs
 #../../../external/corefx/src/System.Reflection.Emit/tests/ModuleBuilder/ModuleBuilderDefineType.cs
-#../../../external/corefx/src/System.Reflection.Emit/tests/ModuleBuilder/ModuleBuilderDefineUninitializedData.cs
+../../../external/corefx/src/System.Reflection.Emit/tests/ModuleBuilder/ModuleBuilderDefineUninitializedData.cs
 #../../../external/corefx/src/System.Reflection.Emit/tests/ModuleBuilder/ModuleBuilderGetArrayMethod.cs
 #../../../external/corefx/src/System.Reflection.Emit/tests/ModuleBuilder/ModuleBuilderSetCustomAttribute.cs