Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Habersack <grendel@twistedcode.net>2011-04-18 15:22:20 +0400
committerMarek Habersack <grendel@twistedcode.net>2011-04-18 15:23:28 +0400
commitce3b0b7564d9cae02068aa5d2e2414e723426030 (patch)
tree3f661d63c1a983431a61319109d13539c02c4613
parenta9777b31fc9bfb9d021c6132933de20de7364fc5 (diff)
[asp.net] ScriptResourceHandler must correctly encode script literals.2.10.2
-rw-r--r--mcs/class/System.Web.Extensions/System.Web.Handlers/ScriptResourceHandler.cs44
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