diff options
author | Marek Habersack <grendel@twistedcode.net> | 2011-04-18 15:22:20 +0400 |
---|---|---|
committer | Marek Habersack <grendel@twistedcode.net> | 2011-04-18 15:23:28 +0400 |
commit | ce3b0b7564d9cae02068aa5d2e2414e723426030 (patch) | |
tree | 3f661d63c1a983431a61319109d13539c02c4613 | |
parent | a9777b31fc9bfb9d021c6132933de20de7364fc5 (diff) |
[asp.net] ScriptResourceHandler must correctly encode script literals.2.10.2
-rw-r--r-- | mcs/class/System.Web.Extensions/System.Web.Handlers/ScriptResourceHandler.cs | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/mcs/class/System.Web.Extensions/System.Web.Handlers/ScriptResourceHandler.cs b/mcs/class/System.Web.Extensions/System.Web.Handlers/ScriptResourceHandler.cs index 34cf597043d..373d9661fb4 100644 --- a/mcs/class/System.Web.Extensions/System.Web.Handlers/ScriptResourceHandler.cs +++ b/mcs/class/System.Web.Extensions/System.Web.Handlers/ScriptResourceHandler.cs @@ -51,12 +51,44 @@ namespace System.Web.Handlers #endregion
- // TODO: optimize
- static string GetScriptStringLiteral (string value) {
- string s = value;
- s = s.Replace ("\\", "\\\\");
- s = s.Replace ("\"", "\\\"");
- return "\"" + s + "\"";
+ // TODO: add value cache?
+ static string GetScriptStringLiteral (string value)
+ {
+ if (String.IsNullOrEmpty (value))
+ return "\"" + value + "\"";
+
+ var sb = new StringBuilder ("\"");
+ for (int i = 0; i < value.Length; i++) {
+ char ch = value [i];
+ switch (ch) {
+ case '\'':
+ sb.Append ("\\u0027");
+ break;
+
+ case '"':
+ sb.Append ("\\\"");
+ break;
+
+ case '\\':
+ sb.Append ("\\\\");
+ break;
+
+ case '\n':
+ sb.Append ("\\n");
+ break;
+
+ case '\r':
+ sb.Append ("\\r");
+ break;
+
+ default:
+ sb.Append (ch);
+ break;
+ }
+ }
+ sb.Append ("\"");
+
+ return sb.ToString ();
}
class ResourceKey
|