fix(urlUtils): made removal of windows drive from path safer

Prior to this fix, the urlResolve method would automatically
strip the first segment of a path if the segment ends in a colon.
This was to correct undesired behavior in the $location service
using the file protocol on windows in multiple browsers (see #4680).

However, there could be cases where users intentionally 
have first path segments that end in a colon 
(although this conflicts with section 3.3 of rfc3986).

The solution to this problem is an extra check to make sure
the first path segment of the input url does not end with a colon,
to make sure we're only removing undesired path segments.

Fixes #4939
This commit is contained in:
Jeff Cross
2013-11-13 12:56:54 -08:00
parent bcc6e8d4f6
commit 89f435de84
3 changed files with 38 additions and 19 deletions

View File

@@ -34,7 +34,6 @@ describe('$location', function() {
};
}));
afterEach(inject(function ($sniffer) {
if ($sniffer.msie) return;
//reset urlParsingNode
@@ -50,6 +49,14 @@ describe('$location', function() {
expect(url.path()).toBe('/foo');
});
it('should include the drive name if it was provided in the input url', function () {
url = new LocationHashbangUrl('file:///base', '#!');
url.$$parse('file:///base#!/C:/foo?a=b&c#hash');
expect(url.path()).toBe('/C:/foo');
});
});