summaryrefslogtreecommitdiffstats
path: root/web/path.js
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2014-02-21 08:59:03 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2014-02-21 13:12:48 +0200
commit870d9c2e141d9fd494657f36c8c8e162eb446dff (patch)
tree402bdcebb1dfa9e3fba8c25406d9243662eacb86 /web/path.js
parent551561b94a7d594a12ba8114f57d8f3ef6d1db71 (diff)
downloadaconf-870d9c2e141d9fd494657f36c8c8e162eb446dff.tar.bz2
aconf-870d9c2e141d9fd494657f36c8c8e162eb446dff.tar.xz
web client: fix path escaping problems
Diffstat (limited to 'web/path.js')
-rw-r--r--web/path.js32
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) {