diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2014-02-21 08:59:03 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2014-02-21 13:12:48 +0200 |
commit | 870d9c2e141d9fd494657f36c8c8e162eb446dff (patch) | |
tree | 402bdcebb1dfa9e3fba8c25406d9243662eacb86 /web/path.js | |
parent | 551561b94a7d594a12ba8114f57d8f3ef6d1db71 (diff) | |
download | aconf-870d9c2e141d9fd494657f36c8c8e162eb446dff.tar.bz2 aconf-870d9c2e141d9fd494657f36c8c8e162eb446dff.tar.xz |
web client: fix path escaping problems
Diffstat (limited to 'web/path.js')
-rw-r--r-- | web/path.js | 32 |
1 files changed, 27 insertions, 5 deletions
diff --git a/web/path.js b/web/path.js index bb60c76..2373867 100644 --- a/web/path.js +++ b/web/path.js @@ -6,12 +6,34 @@ define(["underscore"], function(_) { function split(path) { var res = []; - while (path && path != "/") { - var comp = path.match(/^\/([^\\\/]|\\.)+/)[0]; - res.push(comp.substring(1)); - path = path.substring(comp.length); + var comp = ""; + var escaped; + + function merge(s) { + var n = Number(s); + if (s > "") res.push((escaped || isNaN) ? s : n); + } + + while (true) { + var m = path.match(/^([^\\\/]*)([\\\/])(.*)/); + if (!m) { + merge(comp + path); + return res; + } + + comp += m[1]; + if (m[2] == "\\") { + comp += m[3].substring(0, 1); + escaped = true; + path = m[3].substring(1); + } + else { + merge(comp); + comp = ""; + escaped = false; + path = m[3]; + } } - return res; } function escape(name) { |