Skip to content

Commit

Permalink
fix($location): don't call indexOf() of undefined href attribute
Browse files Browse the repository at this point in the history
  • Loading branch information
caitp committed Aug 19, 2014
1 parent b7e82a3 commit 1c42ebc
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/ng/location.js
Original file line number Diff line number Diff line change
Expand Up @@ -670,7 +670,7 @@ function $LocationProvider(){
// http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx
var href = elm.attr('href') || elm.attr('xlink:href');

if (href.indexOf('://') < 0) { // Ignore absolute URLs
if (href && href.indexOf('://') < 0) { // Ignore absolute URLs
var prefix = '#' + hashPrefix;
if (href[0] == '/') {
// absolute path - replace old path
Expand Down
32 changes: 26 additions & 6 deletions test/ng/locationSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -853,15 +853,21 @@ describe('$location', function() {
attrs = attrs ? ' ' + attrs + ' ' : '';

// fake the base behavior
if (!relLink) {
if (linkHref[0] == '/') {
linkHref = 'http://host.com' + linkHref;
} else if(!linkHref.match(/:\/\//)) {
linkHref = 'http://host.com/base/' + linkHref;
if (typeof linkHref === 'string') {
if (!relLink) {
if (linkHref[0] == '/') {
linkHref = 'http://host.com' + linkHref;
} else if(!linkHref.match(/:\/\//)) {
linkHref = 'http://host.com/base/' + linkHref;
}
}
}

link = jqLite('<a href="' + linkHref + '"' + attrs + '>' + content + '</a>')[0];
if (linkHref) {
link = jqLite('<a href="' + linkHref + '"' + attrs + '>' + content + '</a>')[0];
} else {
link = jqLite('<a ' + attrs + '>' + content + '</a>')[0];
}

$provide.value('$sniffer', {history: supportHist});
$locationProvider.html5Mode(html5Mode);
Expand Down Expand Up @@ -976,6 +982,20 @@ describe('$location', function() {
});


// Regression (gh-7721)
it('should not throw when clicking anchor with no href attribute when history enabled on old browser', function() {
configureService(null, true, false);
inject(
initBrowser(),
initLocation(),
function($browser) {
browserTrigger(link, 'click');
expectNoRewrite($browser);
}
);
});


it('should rewrite abs link to hashbang url when history enabled on old browser', function() {
configureService('/base/link?a#b', true, false);
inject(
Expand Down

0 comments on commit 1c42ebc

Please sign in to comment.