Skip to content
This repository has been archived by the owner on Apr 12, 2024. It is now read-only.

Commit

Permalink
fix($route): fix regex escaping in route matcher
Browse files Browse the repository at this point in the history
  • Loading branch information
IgorMinar committed Sep 21, 2011
1 parent 62ae7fc commit 2bc39bb
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/service/route.js
Original file line number Diff line number Diff line change
Expand Up @@ -235,14 +235,16 @@ angularServiceInject('$route', function($location, $routeParams) {
/////////////////////////////////////////////////////

function switchRouteMatcher(on, when) {
var regex = '^' + when.replace(/[\.\\\(\)\^\$]/g, "\$1") + '$',
// TODO(i): this code is convoluted and inefficient, we should construct the route matching
// regex only once and then reuse it
var regex = '^' + when.replace(/([\.\\\(\)\^\$])/g, "\\$1") + '$',
params = [],
dst = {};
forEach(when.split(/\W/), function(param) {
if (param) {
var paramRegExp = new RegExp(":" + param + "([\\W])");
if (regex.match(paramRegExp)) {
regex = regex.replace(paramRegExp, "([^\/]*)$1");
regex = regex.replace(paramRegExp, "([^\\/]*)$1");
params.push(param);
}
}
Expand Down
21 changes: 21 additions & 0 deletions test/service/routeSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,27 @@ describe('$route', function() {
});


it('should match a route that contains special chars in the path', function() {
$route.when('/$test.23/foo(bar)/:baz', {template: 'test.html'});

$location.path('/test');
scope.$digest();
expect($route.current).toBeUndefined();

$location.path('/$testX23/foo(bar)/222');
scope.$digest();
expect($route.current).toBeUndefined();

$location.path('/$test.23/foo(bar)/222');
scope.$digest();
expect($route.current).toBeDefined();

$location.path('/$test.23/foo\\(bar)/222');
scope.$digest();
expect($route.current).toBeUndefined();
});


it('should change route even when only search param changes', function() {
var callback = jasmine.createSpy('onRouteChange');

Expand Down

0 comments on commit 2bc39bb

Please sign in to comment.