Beispiel #1
0
        public void Resolve()
        {
            if (Compiler.Settings.Unsafe && module.PredefinedTypes.SecurityAction.Define())
            {
                //
                // Emits [assembly: SecurityPermissionAttribute (SecurityAction.RequestMinimum, SkipVerification = true)]
                // when -unsafe option was specified
                //
                Location loc = Location.Null;

                MemberAccess system_security_permissions = new MemberAccess(new MemberAccess(
                                                                                new QualifiedAliasMember(QualifiedAliasMember.GlobalAlias, "System", loc), "Security", loc), "Permissions", loc);

                var req_min = (ConstSpec)module.PredefinedTypes.SecurityAction.GetField("RequestMinimum", module.PredefinedTypes.SecurityAction.TypeSpec, loc);

                Arguments pos = new Arguments(1);
                pos.Add(new Argument(req_min.GetConstant(null)));

                Arguments named = new Arguments(1);
                named.Add(new NamedArgument("SkipVerification", loc, new BoolLiteral(true, loc)));

                GlobalAttribute g = new GlobalAttribute(new NamespaceEntry(module, null, null, null), "assembly",
                                                        new MemberAccess(system_security_permissions, "SecurityPermissionAttribute"),
                                                        new Arguments[] { pos, named }, loc, false);
                g.AttachTo(module, module);
                var ctor = g.Resolve();
                //if (ctor != null) {
                //    g.ExtractSecurityPermissionSet (ctor, ref declarative_security);
                //}
            }

            if (module.OptAttributes == null)
            {
                return;
            }

            // Ensure that we only have GlobalAttributes, since the Search isn't safe with other types.
            if (!module.OptAttributes.CheckTargets())
            {
                return;
            }

            cls_attribute = module.ResolveAssemblyAttribute(module.PredefinedAttributes.CLSCompliant);

            if (cls_attribute != null)
            {
                is_cls_compliant = cls_attribute.GetClsCompliantAttributeValue();
            }

            if (added_modules != null && Compiler.Settings.VerifyClsCompliance && is_cls_compliant)
            {
                foreach (var m in added_modules)
                {
                    if (!m.IsCLSCompliant)
                    {
                        Report.Error(3013,
                                     "Added modules must be marked with the CLSCompliant attribute to match the assembly",
                                     m.Name);
                    }
                }
            }

            Attribute a = module.ResolveAssemblyAttribute(module.PredefinedAttributes.RuntimeCompatibility);

            if (a != null)
            {
                var val = a.GetNamedValue("WrapNonExceptionThrows") as BoolConstant;
                if (val != null)
                {
                    wrap_non_exception_throws = val.Value;
                }
            }
        }
Beispiel #2
0
        public void Resolve()
        {
            if (RootContext.Unsafe)
            {
                //
                // Emits [assembly: SecurityPermissionAttribute (SecurityAction.RequestMinimum, SkipVerification = true)]
                // when -unsafe option was specified
                //

                Location loc = Location.Null;

                MemberAccess system_security_permissions = new MemberAccess(new MemberAccess(
                                                                                new QualifiedAliasMember(QualifiedAliasMember.GlobalAlias, "System", loc), "Security", loc), "Permissions", loc);

                Arguments pos = new Arguments(1);
                pos.Add(new Argument(new MemberAccess(new MemberAccess(system_security_permissions, "SecurityAction", loc), "RequestMinimum")));

                Arguments named = new Arguments(1);
                named.Add(new NamedArgument(new LocatedToken(loc, "SkipVerification"), (new BoolLiteral(true, loc))));

                GlobalAttribute g = new GlobalAttribute(new NamespaceEntry(null, null, null), "assembly",
                                                        new MemberAccess(system_security_permissions, "SecurityPermissionAttribute"),
                                                        new Arguments[] { pos, named }, loc, false);
                g.AttachTo(this, this);

                if (g.Resolve() != null)
                {
                    declarative_security = new ListDictionary();
                    g.ExtractSecurityPermissionSet(declarative_security);
                }
            }

            if (OptAttributes == null)
            {
                return;
            }

            // Ensure that we only have GlobalAttributes, since the Search isn't safe with other types.
            if (!OptAttributes.CheckTargets())
            {
                return;
            }

            ClsCompliantAttribute = ResolveAttribute(PredefinedAttributes.Get.CLSCompliant);

            if (ClsCompliantAttribute != null)
            {
                is_cls_compliant = ClsCompliantAttribute.GetClsCompliantAttributeValue();
            }

            Attribute a = ResolveAttribute(PredefinedAttributes.Get.RuntimeCompatibility);

            if (a != null)
            {
                object val = a.GetPropertyValue("WrapNonExceptionThrows");
                if (val != null)
                {
                    wrap_non_exception_throws = (bool)val;
                }
            }
        }