//
//
-// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005-2009 Novell, Inc (http://www.novell.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
using System.Collections;
using System.Text;
+using System.Web.Configuration;
-namespace System.Web {
-
- internal abstract class BaseResponseHeader {
- public string Value;
+namespace System.Web
+{
+ abstract class BaseResponseHeader
+ {
+ string headerValue;
+
+ public string Value {
+ get { return headerValue; }
+ set { headerValue = EncodeHeader (value); }
+ }
+ static bool headerCheckingEnabled;
+
+ static BaseResponseHeader ()
+ {
+ HttpRuntimeSection section = WebConfigurationManager.GetWebApplicationSection ("system.web/httpRuntime") as HttpRuntimeSection;
+ headerCheckingEnabled = section == null || section.EnableHeaderChecking;
+ }
+
+
internal BaseResponseHeader (string val)
{
Value = val;
}
+ string EncodeHeader (string value)
+ {
+ if (value == null || value.Length == 0)
+ return value;
+
+ if (headerCheckingEnabled) {
+ StringBuilder ret = new StringBuilder ();
+ int len = value.Length;
+
+ for (int i = 0; i < len; i++) {
+ switch (value [i]) {
+ case '\r':
+ ret.Append ("%0d");
+ break;
+
+ case '\n':
+ ret.Append ("%0a");
+ break;
+
+ default:
+ ret.Append (value [i]);
+ break;
+ }
+ }
+
+ return ret.ToString ();
+ } else
+ return value;
+ }
+
internal abstract void SendContent (HttpWorkerRequest wr);
}