Exemplo n.º 1
0
 private static void ValidateChecksumPragma(CodeChecksumPragma e)
 {
     if (e.FileName.IndexOfAny(Path.GetInvalidPathChars()) != -1)
     {
         throw new ArgumentException(SR.GetString("InvalidPathCharsInChecksum", new object[] { e.FileName }));
     }
 }
Exemplo n.º 2
0
 private static void ValidateChecksumPragma(CodeChecksumPragma e)
 {
     if (e.FileName.IndexOfAny(Path.GetInvalidPathChars()) != -1)
     {
         throw new ArgumentException(SR.Format(SR.InvalidPathCharsInChecksum, e.FileName));
     }
 }
Exemplo n.º 3
0
        public void Constructor1()
        {
            string fileName    = "mono";
            Guid   algorithmId = Guid.NewGuid();

            byte[] data = new byte[] { 0, 1 };

            CodeChecksumPragma ccp = new CodeChecksumPragma(fileName, algorithmId, data);

            Assert.AreEqual(algorithmId, ccp.ChecksumAlgorithmId, "#1");
            Assert.AreEqual(data, ccp.ChecksumData, "#2");
            Assert.AreEqual(fileName, ccp.FileName, "#3");
            Assert.AreSame(data, ccp.ChecksumData, "#4");
            Assert.AreSame(fileName, ccp.FileName, "#5");

            ccp.ChecksumAlgorithmId = Guid.Empty;
            Assert.AreEqual(Guid.Empty, ccp.ChecksumAlgorithmId, "#6");

            ccp.ChecksumData = null;
            Assert.IsNull(ccp.ChecksumData, "#7");

            ccp.FileName = null;
            Assert.IsNotNull(ccp.FileName, "#8");
            Assert.AreEqual(string.Empty, ccp.FileName, "#9");

            ccp = new CodeChecksumPragma((string)null, Guid.Empty, (byte[])null);
            Assert.AreEqual(Guid.Empty, ccp.ChecksumAlgorithmId, "#10");
            Assert.IsNull(ccp.ChecksumData, "#11");
            Assert.IsNotNull(ccp.FileName, "#12");
            Assert.AreEqual(string.Empty, ccp.FileName, "#13");
        }
 private void AddChecksumPragma(System.Web.Compilation.BuildProvider buildProvider, CodeCompileUnit compileUnit)
 {
     if (((buildProvider != null) && (buildProvider.VirtualPath != null)) && this._compilerType.CompilerParameters.IncludeDebugInformation)
     {
         string path = HostingEnvironment.MapPathInternal(buildProvider.VirtualPath);
         if (File.Exists(path))
         {
             if (!s_hashMD5Guid.HasValue)
             {
                 s_hashMD5Guid = new Guid(0x406ea660, 0x64cf, 0x4c82, 0xb6, 240, 0x42, 0xd4, 0x81, 0x72, 0xa7, 0x99);
             }
             CodeChecksumPragma pragma = new CodeChecksumPragma();
             if (this._compConfig.UrlLinePragmas)
             {
                 pragma.FileName = ErrorFormatter.MakeHttpLinePragma(buildProvider.VirtualPathObject.VirtualPathString);
             }
             else
             {
                 pragma.FileName = path;
             }
             pragma.ChecksumAlgorithmId = s_hashMD5Guid.Value;
             using (Stream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
             {
                 pragma.ChecksumData = this.ComputeHash(stream);
             }
             compileUnit.StartDirectives.Add(pragma);
         }
     }
 }
Exemplo n.º 5
0
        public void Constructor0_Deny_Unrestricted()
        {
            CodeChecksumPragma ccp = new CodeChecksumPragma();

            Assert.AreEqual(Guid.Empty, ccp.ChecksumAlgorithmId, "ChecksumAlgorithmId");
            ccp.ChecksumAlgorithmId = Guid.NewGuid();
            Assert.IsNull(ccp.ChecksumData, "ChecksumData");
            ccp.ChecksumData = new byte [1];
            Assert.AreEqual(String.Empty, ccp.FileName, "FileName");
        }
Exemplo n.º 6
0
        public void Constructor1_Deny_Unrestricted()
        {
            Guid g = Guid.NewGuid();
            CodeChecksumPragma ccp = new CodeChecksumPragma("mono", g, new byte [1]);

            Assert.AreEqual(g, ccp.ChecksumAlgorithmId, "ChecksumAlgorithmId");
            ccp.ChecksumAlgorithmId = Guid.Empty;
            Assert.AreEqual(1, ccp.ChecksumData.Length, "ChecksumData");
            ccp.ChecksumData = new byte[0];
            Assert.AreEqual("mono", ccp.FileName, "FileName");
        }
Exemplo n.º 7
0
        public void Constructor0()
        {
            CodeChecksumPragma ccp = new CodeChecksumPragma();

            Assert.AreEqual(Guid.Empty, ccp.ChecksumAlgorithmId, "#1");
            Assert.IsNull(ccp.ChecksumData, "#2");
            Assert.IsNotNull(ccp.FileName, "#3");
            Assert.AreEqual(string.Empty, ccp.FileName, "#4");

            ccp.FileName = null;
            Assert.IsNotNull(ccp.FileName, "#5");
            Assert.AreEqual(string.Empty, ccp.FileName, "#6");
        }
Exemplo n.º 8
0
    public override void BuildTree (CodeDomProvider provider, CodeCompileUnit cu) {
#if WHIDBEY
        // VB code provider doesn't currently generate checksum statements.  This
        // will be completed before the next release of the CLR.
        // JScript does not currently support checksum pragmas.
        if (!(provider is VBCodeProvider) && !(provider is JScriptCodeProvider)) {
            // GENERATES (C#):
            // #pragma checksum "c:\foo\bar\OuterLinePragma.txt" "{406ea660-64cf-4c82-b6f0-42d48172a799}" "DEAD"
            // #pragma checksum "bogus.txt" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "F00BAA"
            // #pragma checksum "" "{00000000-0000-0000-0000-000000000000}" ""
            //
            //  // Namespace Comment
            //  namespace Namespace1 {
            //      
            //      
            //      // Outer Type Comment
            //      
            //      #line 300 "c:\foo\bar\OuterLinePragma.txt"
            //      public class Class1 {
            //          
            //          public void Method1() {
            //          }
            //          
            //          // Method 2 Comment
            //          public void Method2() {
            //          }
            //      }
            //      
            //      #line default
            //      #line hidden
            //  }

            AddScenario ("CheckPragmasInSrcCode", "Checks to see if the pragmas are in the generated source code.");
            CodeChecksumPragma pragma1 = new CodeChecksumPragma();
            pragma1.FileName = "c:\\foo\\bar\\OuterLinePragma.txt";
            pragma1.ChecksumAlgorithmId = HashMD5;
            pragma1.ChecksumData = new byte[] {0xDE, 0xAD};            
            cu.StartDirectives.Add(pragma1);
            CodeChecksumPragma pragma2 = new CodeChecksumPragma("bogus.txt", HashSHA1, new byte[]{0xF0, 0x0B, 0xAA});
            cu.StartDirectives.Add(pragma2);
            CodeChecksumPragma pragma3 = new CodeChecksumPragma();
            cu.StartDirectives.Add(pragma3);

            CodeNamespace ns = new CodeNamespace("Namespace1");
            ns.Comments.Add(new CodeCommentStatement("Namespace Comment"));

            cu.Namespaces.Add(ns);

            CodeTypeDeclaration cd = new CodeTypeDeclaration ("Class1");
            ns.Types.Add(cd);

            cd.Comments.Add(new CodeCommentStatement("Outer Type Comment"));
            cd.LinePragma = new CodeLinePragma("c:\\foo\\bar\\OuterLinePragma.txt", 300);

            CodeMemberMethod method1 = new CodeMemberMethod();
            method1.Name = "Method1";
            method1.Attributes = (method1.Attributes & ~MemberAttributes.AccessMask) | MemberAttributes.Public;            


            CodeMemberMethod method2 = new CodeMemberMethod();
            method2.Name = "Method2";
            method2.Attributes = (method2.Attributes & ~MemberAttributes.AccessMask) | MemberAttributes.Public;
            method2.Comments.Add(new CodeCommentStatement("Method 2 Comment"));                                            

            cd.Members.Add(method1);
            cd.Members.Add(method2);
        }
#endif
    }
Exemplo n.º 9
0
 protected virtual void Visit(CodeChecksumPragma directive)
 {
 }
Exemplo n.º 10
0
 protected override void Visit(CodeChecksumPragma directive)
 {
     base.Visit(directive);
 }
Exemplo n.º 11
0
        internal void ConstructType()
        {
            unit = new CodeCompileUnit();
            byte[] md5checksum = parser.MD5Checksum;

            if (md5checksum != null)
            {
                CodeChecksumPragma pragma = new CodeChecksumPragma();
                pragma.FileName            = parser.InputFile;
                pragma.ChecksumAlgorithmId = HashMD5;
                pragma.ChecksumData        = md5checksum;

                unit.StartDirectives.Add(pragma);
            }

            if (parser.IsPartial)
            {
                string partialns        = null;
                string partialclasstype = parser.PartialClassName;

                int partialdot = partialclasstype.LastIndexOf('.');
                if (partialdot != -1)
                {
                    partialns        = partialclasstype.Substring(0, partialdot);
                    partialclasstype = partialclasstype.Substring(partialdot + 1);
                }

                CodeNamespace partialNS = new CodeNamespace(partialns);
                partialClass           = new CodeTypeDeclaration(partialclasstype);
                partialClass.IsPartial = true;
                partialClassExpr       = new CodeTypeReferenceExpression(parser.PartialClassName);

                unit.Namespaces.Add(partialNS);
                partialClass.TypeAttributes = TypeAttributes.Public;
                partialNS.Types.Add(partialClass);
            }

            string mainclasstype = parser.ClassName;
            string mainns        = DEFAULT_NAMESPACE;
            int    maindot       = mainclasstype.LastIndexOf('.');

            if (maindot != -1)
            {
                mainns        = mainclasstype.Substring(0, maindot);
                mainclasstype = mainclasstype.Substring(maindot + 1);
            }

            mainNS    = new CodeNamespace(mainns);
            mainClass = new CodeTypeDeclaration(mainclasstype);
            CodeTypeReference baseTypeRef;

            if (partialClass != null)
            {
                baseTypeRef          = new CodeTypeReference(parser.PartialClassName);
                baseTypeRef.Options |= CodeTypeReferenceOptions.GlobalReference;
            }
            else
            {
                baseTypeRef = new CodeTypeReference(parser.BaseType.FullName);
                if (parser.BaseTypeIsGlobal)
                {
                    baseTypeRef.Options |= CodeTypeReferenceOptions.GlobalReference;
                }
            }
            mainClass.BaseTypes.Add(baseTypeRef);

            mainClassExpr = new CodeTypeReferenceExpression(mainns + "." + mainclasstype);

            unit.Namespaces.Add(mainNS);
            mainClass.TypeAttributes = TypeAttributes.Public;
            mainNS.Types.Add(mainClass);

            foreach (object o in parser.Imports.Keys)
            {
                if (o is string)
                {
                    mainNS.Imports.Add(new CodeNamespaceImport((string)o));
                }
            }

            // StringCollection.Contains has O(n) complexity, but
            // considering the number of comparisons we make on
            // average and the fact that using an intermediate array
            // would be even more costly, this is fine here.
            StringCollection refAsm = unit.ReferencedAssemblies;
            string           asmName;

            if (parser.Assemblies != null)
            {
                foreach (object o in parser.Assemblies)
                {
                    asmName = o as string;
                    if (asmName != null && !refAsm.Contains(asmName))
                    {
                        refAsm.Add(asmName);
                    }
                }
            }

            ArrayList al = WebConfigurationManager.ExtraAssemblies;

            if (al != null && al.Count > 0)
            {
                foreach (object o in al)
                {
                    asmName = o as string;
                    if (asmName != null && !refAsm.Contains(asmName))
                    {
                        refAsm.Add(asmName);
                    }
                }
            }

            IList list = BuildManager.CodeAssemblies;

            if (list != null && list.Count > 0)
            {
                Assembly asm;
                foreach (object o in list)
                {
                    asm = o as Assembly;
                    if (o == null)
                    {
                        continue;
                    }
                    asmName = asm.Location;
                    if (asmName != null && !refAsm.Contains(asmName))
                    {
                        refAsm.Add(asmName);
                    }
                }
            }

            // Late-bound generators specifics (as for MonoBASIC/VB.NET)
            unit.UserData["RequireVariableDeclaration"] = parser.ExplicitOn;
            unit.UserData["AllowLateBound"]             = !parser.StrictOn;

            InitializeType();
            AddInterfaces();
            AddClassAttributes();
            CreateStaticFields();
            AddApplicationAndSessionObjects();
            AddScripts();
            CreateMethods();
            CreateConstructor(null, null);
        }
Exemplo n.º 12
0
    public override void BuildTree(CodeDomProvider provider, CodeCompileUnit cu)
    {
#if WHIDBEY
        // VB code provider doesn't currently generate checksum statements.  This
        // will be completed before the next release of the CLR.
        // JScript does not currently support checksum pragmas.
        if (!(provider is VBCodeProvider) && !(provider is JScriptCodeProvider))
        {
            // GENERATES (C#):
            // #pragma checksum "c:\foo\bar\OuterLinePragma.txt" "{406ea660-64cf-4c82-b6f0-42d48172a799}" "DEAD"
            // #pragma checksum "bogus.txt" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "F00BAA"
            // #pragma checksum "" "{00000000-0000-0000-0000-000000000000}" ""
            //
            //  // Namespace Comment
            //  namespace Namespace1 {
            //
            //
            //      // Outer Type Comment
            //
            //      #line 300 "c:\foo\bar\OuterLinePragma.txt"
            //      public class Class1 {
            //
            //          public void Method1() {
            //          }
            //
            //          // Method 2 Comment
            //          public void Method2() {
            //          }
            //      }
            //
            //      #line default
            //      #line hidden
            //  }

            AddScenario("CheckPragmasInSrcCode", "Checks to see if the pragmas are in the generated source code.");
            CodeChecksumPragma pragma1 = new CodeChecksumPragma();
            pragma1.FileName            = "c:\\foo\\bar\\OuterLinePragma.txt";
            pragma1.ChecksumAlgorithmId = HashMD5;
            pragma1.ChecksumData        = new byte[] { 0xDE, 0xAD };
            cu.StartDirectives.Add(pragma1);
            CodeChecksumPragma pragma2 = new CodeChecksumPragma("bogus.txt", HashSHA1, new byte[] { 0xF0, 0x0B, 0xAA });
            cu.StartDirectives.Add(pragma2);
            CodeChecksumPragma pragma3 = new CodeChecksumPragma();
            cu.StartDirectives.Add(pragma3);

            CodeNamespace ns = new CodeNamespace("Namespace1");
            ns.Comments.Add(new CodeCommentStatement("Namespace Comment"));

            cu.Namespaces.Add(ns);

            CodeTypeDeclaration cd = new CodeTypeDeclaration("Class1");
            ns.Types.Add(cd);

            cd.Comments.Add(new CodeCommentStatement("Outer Type Comment"));
            cd.LinePragma = new CodeLinePragma("c:\\foo\\bar\\OuterLinePragma.txt", 300);

            CodeMemberMethod method1 = new CodeMemberMethod();
            method1.Name       = "Method1";
            method1.Attributes = (method1.Attributes & ~MemberAttributes.AccessMask) | MemberAttributes.Public;


            CodeMemberMethod method2 = new CodeMemberMethod();
            method2.Name       = "Method2";
            method2.Attributes = (method2.Attributes & ~MemberAttributes.AccessMask) | MemberAttributes.Public;
            method2.Comments.Add(new CodeCommentStatement("Method 2 Comment"));

            cd.Members.Add(method1);
            cd.Members.Add(method2);
        }
#endif
    }
Exemplo n.º 13
0
 private static void ValidateChecksumPragma(CodeChecksumPragma e)
 {
     if (e.FileName.IndexOfAny(Path.GetInvalidPathChars()) != -1)
         throw new ArgumentException(SR.Format(SR.InvalidPathCharsInChecksum, e.FileName));
 }