change uri path escaping to use backslashes to secure forward slashes
Robert 'phaylon' Sedlacek [Wed, 20 Jun 2012 19:14:21 +0000 (19:14 +0000)]
br.pl

diff --git a/br.pl b/br.pl
index 2e30991..590d940 100644 (file)
--- a/br.pl
+++ b/br.pl
@@ -40,7 +40,11 @@ sub dispatch_request {
     },
   },
   sub (/**/) {
-    $self->structure(split '/', $_[1]);
+    $self->structure(map {
+      s{\\/}{/}g;
+      s{\\\\}{\\}g;
+      $_;
+    } split qr{(?<!\\)/}, $_[1]);
   },
 }
 
@@ -155,11 +159,15 @@ sub mangle_structure {
 sub link_to {
   my ($self, @to) = @_;
   use HTML::Tags;
-  my @link = map uri_escape(uri_escape($_)), @to;
+  my @link = map {
+    s{\\}{\\\\}g;
+    s{/}{\\/}g;
+    $_;
+  } @to;
   my $link = join('/', @link, '');
   my $to = $to[-1];
   my $html = join '', HTML::Tags::to_html_string(
-    <a href="${link}">, "Explore $to", </a>
+    <a href="./${link}">, "Explore $to", </a>
   );
   return \$html;
 }
@@ -171,7 +179,7 @@ sub descend {
     $target = $self->json->decode(scalar $target->all);
   }
   return $target unless @path;
-  my $step = uri_unescape(uri_unescape( shift @path));
+  my $step = shift @path;
   $self->descend($target->{$step}, @path);
 }