Check whether mcs output name is valid
[mono.git] / mcs / mcs / driver.cs
index f029e9a1934b0daa1c464eea6add7ed7dd2d8624..cd42b8974c631cd7efc4a86f15b8153f2090933b 100644 (file)
@@ -113,7 +113,7 @@ namespace Mono.CSharp
                        input.Close ();
                }
 
-               public void Parse (SeekableStreamReader reader, SourceFile sourceFile, ModuleContainer module)
+               public static void Parse (SeekableStreamReader reader, SourceFile sourceFile, ModuleContainer module)
                {
                        var file = new CompilationSourceFile (module, sourceFile);
                        module.AddTypeContainer (file);
@@ -211,6 +211,11 @@ namespace Mono.CSharp
                                return false;
                        }
 
+                       if (settings.Platform == Platform.AnyCPU32Preferred && (settings.Target == Target.Library || settings.Target == Target.Module)) {
+                               Report.Error (4023, "Platform option `anycpu32bitpreferred' is valid only for executables");
+                               return false;
+                       }
+
                        TimeReporter tr = new TimeReporter (settings.Timestamps);
                        ctx.TimeReporter = tr;
                        tr.StartTotal ();
@@ -251,6 +256,12 @@ namespace Mono.CSharp
                                output_file = output_file_name;
                        } else {
                                output_file_name = Path.GetFileName (output_file);
+
+                               if (string.IsNullOrEmpty (Path.GetFileNameWithoutExtension (output_file_name)) ||
+                                       output_file_name.IndexOfAny (Path.GetInvalidFileNameChars ()) >= 0) {
+                                       Report.Error (2021, "Output file name is not valid");
+                                       return false;
+                               }
                        }
 
 #if STATIC
@@ -393,7 +404,6 @@ namespace Mono.CSharp
                        if (!full_flag)
                                return;
 
-                       SymbolWriter.Reset ();
                        Linq.QueryBlock.TransparentParameter.Reset ();
                        TypeInfo.Reset ();
                }