[linker] process only .xml files, catch xml exceptions
authorRadek Doulik <rodo@xamarin.com>
Wed, 3 Jun 2015 15:21:28 +0000 (17:21 +0200)
committerRadek Doulik <rodo@xamarin.com>
Sun, 19 Jul 2015 08:41:36 +0000 (10:41 +0200)
[merged from monodroid by rodo]

commit f51f044e30b822f191777a395563ef9d46f8b69d
Author: Radek Doulik <rodo@xamarin.com>
Date:   Wed Mar 4 18:28:59 2015 +0100

     - fixes #27620

     - in this case we were trying to process Application.java
       as linker an assembly XML linker description, which led
       to uncaught XmlException

mcs/tools/linker/Mono.Linker.Steps/BlacklistStep.cs

index 670fa04c66194c1f4bdc447a1421c9640a34c8a6..c65d3037c8e64b6960bf38b312bc2e801aaac43b 100644 (file)
@@ -47,10 +47,18 @@ namespace Mono.Linker.Steps {
                protected override void Process ()
                {
                        foreach (string name in Assembly.GetExecutingAssembly ().GetManifestResourceNames ()) {
-                               if (!IsReferenced (GetAssemblyName (name)))
+                               if (Path.GetExtension (name) != ".xml" || !IsReferenced (GetAssemblyName (name)))
                                        continue;
 
-                               Context.Pipeline.AddStepAfter (typeof (TypeMapStep), GetResolveStep (name));
+                               try {
+                                       if (Context.LogInternalExceptions)
+                                               Console.WriteLine ("Processing resource linker descriptor: {0}", name);
+                                       Context.Pipeline.AddStepAfter (typeof (TypeMapStep), GetResolveStep (name));
+                               } catch (XmlException ex) {
+                                       /* This could happen if some broken XML file is included. */
+                                       if (Context.LogInternalExceptions)
+                                               Console.WriteLine ("Error processing {0}: {1}", name, ex);
+                               }
                        }
 
                        foreach (var rsc in Context.GetAssemblies ()