[Pkg-mono-svn-commits] [SCM] mono branch, master-experimental, updated. debian/2.6.3-4-34-gd1bf954

Mirco Bauer meebey at meebey.net
Thu Aug 12 01:17:43 UTC 2010


The following commit has been merged in the master-experimental branch:
commit c88071a23d80c2de67e21cbe5e9821209e4f2695
Merge: 871872741c2d8f6c6325997c44c6f09b7a94dc14 665316e3fe5fcc613bf7ba81d33c05004889d7cf
Author: Mirco Bauer <meebey at meebey.net>
Date:   Mon Aug 2 18:23:39 2010 +0200

    Merge branch 'upstream-experimental' into debian/patches/insecure_EnableViewStateMac_XSS_CVE-2010-1459
    
    Conflicts:
    	mcs/class/System.Web/System.Web.UI/PageParser.cs

diff --combined mcs/class/System.Web/System.Web.Compilation/PageCompiler.cs
index e12249c,9c40c08..770da5f
--- a/mcs/class/System.Web/System.Web.Compilation/PageCompiler.cs
+++ b/mcs/class/System.Web/System.Web.Compilation/PageCompiler.cs
@@@ -84,15 -84,30 +84,30 @@@ namespace System.Web.Compilatio
  							   CodeStatementCollection trueStmt)
  		{
  #if NET_2_0
- 			if (!String.IsNullOrEmpty (pageParser.MasterPageFile))
+ 			MainDirectiveAttribute <string> masterPageFile = pageParser.MasterPageFile;
+ 			if (masterPageFile != null && !masterPageFile.IsExpression)
  				// This is here just to trigger master page build, so that its type
  				// is available when compiling the page itself.
- 				BuildManager.GetCompiledType (pageParser.MasterPageFile);
+ 				BuildManager.GetCompiledType (masterPageFile.Value);
+ 			MainDirectiveAttribute <string> clientTarget;
+ #else
+ 			MainDirectiveAttribute clientTarget;
  #endif
- 			if (pageParser.ClientTarget != null) {
+ 			clientTarget = pageParser.ClientTarget;
+ 			if (clientTarget != null) {
  				CodeExpression prop;
  				prop = new CodePropertyReferenceExpression (thisRef, "ClientTarget");
- 				CodeExpression ct = new CodePrimitiveExpression (pageParser.ClientTarget);
+ 				CodeExpression ct = null;
+ #if NET_2_0
+ 				if (clientTarget.IsExpression) {
+ 					var pi = GetFieldOrProperty (typeof (Page), "ClientTarget") as PropertyInfo;
+ 					if (pi != null)
+ 						ct = CompileExpression (pi, pi.PropertyType, clientTarget.UnparsedValue, false);
+ 				}
+ 
+ 				if (ct == null)
+ #endif
+ 					ct = new CodePrimitiveExpression (clientTarget.Value);
  				if (localVars == null)
  					localVars = new CodeStatementCollection ();
  				localVars.Add (new CodeAssignStatement (prop, ct));
@@@ -222,7 -237,12 +237,12 @@@
  			throw new HttpException (String.Format ("Unable to create assign expression for type '{0}'.", valueType));
  		}
  		
- 		static CodeAssignStatement CreatePropertyAssign (CodeExpression expr, string name, object value)
+ 		static CodeAssignStatement CreatePropertyAssign (CodeExpression owner, string name, CodeExpression rhs)
+ 		{
+ 			return new CodeAssignStatement (new CodePropertyReferenceExpression (owner, name), rhs);
+ 		}
+ 		
+ 		static CodeAssignStatement CreatePropertyAssign (CodeExpression owner, string name, object value)
  		{
  			CodeExpression rhs;
  			if (value == null || value is string)
@@@ -236,27 -256,54 +256,54 @@@
  					rhs = GetExpressionForValueAndType (value, vt);
  			}
  			
- 			return new CodeAssignStatement (new CodePropertyReferenceExpression (expr, name), rhs);
+ 			return CreatePropertyAssign (owner, name, rhs);
  		}
  
  		static CodeAssignStatement CreatePropertyAssign (string name, object value)
  		{
  			return CreatePropertyAssign (thisRef, name, value);
  		}
- 
- 		void AddStatementsFromDirective (CodeMemberMethod method)
+ #if NET_2_0
+ 		void AssignPropertyWithExpression <T> (CodeMemberMethod method, string name, MainDirectiveAttribute <T> value, ILocation location)
+ #else
+ 		void AssignPropertyWithExpression (CodeMemberMethod method, string name, MainDirectiveAttribute value, ILocation location)
+ #endif
  		{
- 			string responseEncoding = pageParser.ResponseEncoding;
- 			if (responseEncoding != null)
- 				method.Statements.Add (CreatePropertyAssign ("ResponseEncoding", responseEncoding));
+ 			if (value == null)
+ 				return;
+ 			CodeAssignStatement assign;
+ #if NET_2_0
+ 			CodeExpression rhs = null;
+ 			
+ 			if (value.IsExpression) {
+ 				var pi = GetFieldOrProperty (typeof (Page), name) as PropertyInfo;
+ 				if (pi != null)
+ 					rhs = CompileExpression (pi, pi.PropertyType, value.UnparsedValue, false);
+ 			}
  			
- 			int codepage = pageParser.CodePage;
- 			if (codepage != -1)
- 				method.Statements.Add (CreatePropertyAssign ("CodePage", codepage));
+ 			if (rhs != null)
+ 				assign = CreatePropertyAssign (thisRef, name, rhs);
+ 			else
+ #endif
+ 				assign = CreatePropertyAssign (name, value.Value);
  
+ 			method.Statements.Add (AddLinePragma (assign, location));
+ 		}
+ 
+ 		void AddStatementsFromDirective (ControlBuilder builder, CodeMemberMethod method, ILocation location)
+ 		{
+ #if NET_2_0
+ 			AssignPropertyWithExpression <string> (method, "ResponseEncoding", pageParser.ResponseEncoding, location);
+ 			AssignPropertyWithExpression <int> (method, "CodePage", pageParser.CodePage, location);
+ 			AssignPropertyWithExpression <int> (method, "LCID", pageParser.LCID, location);
+ #else
+ 			AssignPropertyWithExpression (method, "ResponseEncoding", pageParser.ResponseEncoding, location);
+ 			AssignPropertyWithExpression (method, "CodePage", pageParser.CodePage, location);
+ 			AssignPropertyWithExpression (method, "LCID", pageParser.LCID, location);
+ #endif			
  			string contentType = pageParser.ContentType;
  			if (contentType != null)
- 				method.Statements.Add (CreatePropertyAssign ("ContentType", contentType));
+ 				method.Statements.Add (AddLinePragma (CreatePropertyAssign ("ContentType", contentType), location));
  
  #if !NET_2_0
  			if (pageParser.OutputCache) {
@@@ -264,32 -311,27 +311,27 @@@
  						"InitOutputCache");
  				CodeMethodInvokeExpression invoke = new CodeMethodInvokeExpression (init,
  						OutputCacheParams ());
- 				method.Statements.Add (invoke);
+ 				method.Statements.Add (AddLinePragma (invoke, builder));
  
  			}
  #endif
- 			
- 			int lcid = pageParser.LCID;
- 			if (lcid != -1)
- 				method.Statements.Add (CreatePropertyAssign ("LCID", lcid));
- 
  			string culture = pageParser.Culture;
  			if (culture != null)
- 				method.Statements.Add (CreatePropertyAssign ("Culture", culture));
+ 				method.Statements.Add (AddLinePragma (CreatePropertyAssign ("Culture", culture), location));
  
  			culture = pageParser.UICulture;
  			if (culture != null)
- 				method.Statements.Add (CreatePropertyAssign ("UICulture", culture));
+ 				method.Statements.Add (AddLinePragma (CreatePropertyAssign ("UICulture", culture), location));
  
  			string errorPage = pageParser.ErrorPage;
  			if (errorPage != null)
- 				method.Statements.Add (CreatePropertyAssign ("ErrorPage", errorPage));
+ 				method.Statements.Add (AddLinePragma (CreatePropertyAssign ("ErrorPage", errorPage), location));
  
                          if (pageParser.HaveTrace) {
                                  CodeAssignStatement stmt = new CodeAssignStatement ();
                                  stmt.Left = new CodePropertyReferenceExpression (thisRef, "TraceEnabled");
                                  stmt.Right = new CodePrimitiveExpression (pageParser.Trace);
-                                 method.Statements.Add (stmt);
+                                 method.Statements.Add (AddLinePragma (stmt, location));
                          }
  
                          if (pageParser.TraceMode != TraceMode.Default) {
@@@ -297,14 -339,14 +339,14 @@@
                                  CodeTypeReferenceExpression tm = new CodeTypeReferenceExpression ("System.Web.TraceMode");
                                  stmt.Left = new CodePropertyReferenceExpression (thisRef, "TraceModeValue");
                                  stmt.Right = new CodeFieldReferenceExpression (tm, pageParser.TraceMode.ToString ());
-                                 method.Statements.Add (stmt);
+                                 method.Statements.Add (AddLinePragma (stmt, location));
                          }
  
                          if (pageParser.NotBuffer) {
                                  CodeAssignStatement stmt = new CodeAssignStatement ();
                                  stmt.Left = new CodePropertyReferenceExpression (thisRef, "Buffer");
                                  stmt.Right = new CodePrimitiveExpression (false);
-                                 method.Statements.Add (stmt);
+                                 method.Statements.Add (AddLinePragma (stmt, location));
                          }
  
  #if NET_2_0
@@@ -314,7 -356,7 +356,7 @@@
                                  prop = new CodePropertyReferenceExpression (thisRef, "EnableEventValidation");
  				stmt.Left = prop;
  				stmt.Right = new CodePrimitiveExpression (pageParser.EnableEventValidation);
- 				method.Statements.Add (stmt);
+ 				method.Statements.Add (AddLinePragma (stmt, location));
  			}
  
  			if (pageParser.MaintainScrollPositionOnPostBack) {
@@@ -323,7 -365,7 +365,7 @@@
                                  prop = new CodePropertyReferenceExpression (thisRef, "MaintainScrollPositionOnPostBack");
  				stmt.Left = prop;
  				stmt.Right = new CodePrimitiveExpression (pageParser.MaintainScrollPositionOnPostBack);
- 				method.Statements.Add (stmt);
+ 				method.Statements.Add (AddLinePragma (stmt, location));
  			}
  #endif
  		}
@@@ -337,22 -379,19 +379,19 @@@
  		}
  #endif
  		
- 		protected override void AddStatementsToInitMethod (CodeMemberMethod method)
+ 		protected override void AddStatementsToInitMethod (ControlBuilder builder, CodeMemberMethod method)
  		{
- #if NET_2_0
- 			AddStatementsFromDirective (method);
  			ILocation directiveLocation = pageParser.DirectiveLocation;
- 
  			CodeArgumentReferenceExpression ctrlVar = new CodeArgumentReferenceExpression("__ctrl");
- 			if (pageParser.Title != null)
- 				method.Statements.Add (AddLinePragma (CreatePropertyAssign (ctrlVar, "Title", pageParser.Title), directiveLocation));
- 
- 			if (pageParser.MasterPageFile != null)
- 				method.Statements.Add (AddLinePragma (CreatePropertyAssign (ctrlVar, "MasterPageFile", pageParser.MasterPageFile), directiveLocation));
- 
- 			if (pageParser.Theme != null)
- 				method.Statements.Add (AddLinePragma (CreatePropertyAssign (ctrlVar, "Theme", pageParser.Theme), directiveLocation));
- 
+ 			
+ 			if (pageParser.EnableViewStateMacSet)
+ 				method.Statements.Add (AddLinePragma (CreatePropertyAssign (ctrlVar, "EnableViewStateMac", pageParser.EnableViewStateMac), directiveLocation));
+ #if NET_2_0
+ 			AddStatementsFromDirective (builder, method, directiveLocation);
+ 			AssignPropertyWithExpression <string> (method, "Title", pageParser.Title, directiveLocation);
+ 			AssignPropertyWithExpression <string> (method, "MasterPageFile", pageParser.MasterPageFile, directiveLocation);
+ 			AssignPropertyWithExpression <string> (method, "Theme", pageParser.Theme, directiveLocation);
+ 			
  			if (pageParser.StyleSheetTheme != null)
  				method.Statements.Add (AddLinePragma (CreatePropertyAssign (ctrlVar, "StyleSheetTheme", pageParser.StyleSheetTheme), directiveLocation));
  
@@@ -378,9 -417,9 +417,9 @@@
  		}
  
  		
- 		protected override void AppendStatementsToFrameworkInitialize (CodeMemberMethod method)
+ 		protected override void AppendStatementsToFrameworkInitialize (ControlBuilder builder, CodeMemberMethod method)
  		{
- 			base.AppendStatementsToFrameworkInitialize (method);
+ 			base.AppendStatementsToFrameworkInitialize (builder, method);
  
  			ArrayList deps = pageParser.Dependencies;
  			int depsCount = deps != null ? deps.Count : 0;
@@@ -413,7 -452,7 +452,7 @@@
  #endif
  
  #if ONLY_1_1
- 			AddStatementsFromDirective (method);
+ 			AddStatementsFromDirective (builder, method, pageParser.Location);
  #endif
  			
  #if NET_1_1
@@@ -425,14 -464,6 +464,14 @@@
  				method.Statements.Add (expr);
  			}
  #endif
 +
 +			if (!pageParser.EnableViewStateMac) {
 +				CodeAssignStatement stmt = new CodeAssignStatement ();
 +				stmt.Left = new CodePropertyReferenceExpression (thisRef, "EnableViewStateMac");
 +				stmt.Right = new CodePrimitiveExpression (false);
 +				method.Statements.Add (stmt);
 +			}
 +
  		}
  
  #if NET_2_0
diff --combined mcs/class/System.Web/System.Web.UI/Page.cs
index 1797d89,ad13eaf..e5c55b8
--- a/mcs/class/System.Web/System.Web.UI/Page.cs
+++ b/mcs/class/System.Web/System.Web.UI/Page.cs
@@@ -83,7 -83,7 +83,7 @@@ public partial class Page : TemplateCon
  	bool _hasEnabledControlArray;
  #endif
  	bool _viewState;
 -	bool _viewStateMac;
 +	bool _viewStateMac = true;
  	string _errorPage;
  	bool is_validated;
  	bool _smartNavigation;
@@@ -194,11 -194,16 +194,16 @@@
  			asyncTimeout = ps.AsyncTimeout;
  			viewStateEncryptionMode = ps.ViewStateEncryptionMode;
  			_viewState = ps.EnableViewState;
+ 			_viewStateMac = ps.EnableViewStateMac;
  		} else {
  			asyncTimeout = TimeSpan.FromSeconds (DefaultAsyncTimeout);
  			viewStateEncryptionMode = ViewStateEncryptionMode.Auto;
  			_viewState = true;
  		}
+ #else
+ 		PagesConfiguration ps = PagesConfiguration.GetInstance (HttpContext.Current);
+ 		if (ps != null)
+ 			_viewStateMac = ps.EnableViewStateMac;
  #endif
  	}
  

-- 
mono



More information about the Pkg-mono-svn-commits mailing list