diff options
author | Petka Antonov <petka_antonov@hotmail.com> | 2015-05-03 11:29:54 +0300 |
---|---|---|
committer | Petka Antonov <petka_antonov@hotmail.com> | 2015-05-03 11:29:54 +0300 |
commit | 66877216bd833face753d9a5d573ad477895d880 (patch) | |
tree | c0e510265d0a37f7d596d5e897e462c263256ba4 /lib | |
parent | dbdd81a91bdce4cc59163e3be752dc3c53491987 (diff) | |
download | android-node-v8-66877216bd833face753d9a5d573ad477895d880.tar.gz android-node-v8-66877216bd833face753d9a5d573ad477895d880.tar.bz2 android-node-v8-66877216bd833face753d9a5d573ad477895d880.zip |
url: fix treatment of some values as non-empty
In addition to null, undefined and the empty string
are treated as empty (removing the component from the url).
The string '#' is treated same as empty values when
setting .hash.
The string '?' is treated same as empty values when
setting .search.
PR-URL: https://github.com/iojs/io.js/pull/1589
Fixes: https://github.com/iojs/io.js/issues/1588
Reviewed-By: Roman Reiss <me@silverwind.io>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/url.js | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/lib/url.js b/lib/url.js index 52c3903876..df04ebc12a 100644 --- a/lib/url.js +++ b/lib/url.js @@ -879,7 +879,7 @@ Object.defineProperty(Url.prototype, 'port', { return null; }, set: function(v) { - if (v === null) { + if (isConsideredEmpty(v)) { this._port = -1; if (this._host) this._host = null; @@ -941,7 +941,7 @@ Object.defineProperty(Url.prototype, 'path', { return (p == null && s) ? ('/' + s) : null; }, set: function(v) { - if (v === null) { + if (isConsideredEmpty(v)) { this._pathname = this._search = null; return; } @@ -973,7 +973,7 @@ Object.defineProperty(Url.prototype, 'protocol', { return proto; }, set: function(v) { - if (v === null) { + if (isConsideredEmpty(v)) { this._protocol = null; } else { var proto = '' + v; @@ -1001,7 +1001,7 @@ Object.defineProperty(Url.prototype, 'href', { var parsesQueryStrings = this._parsesQueryStrings; // Reset properties. Url.call(this); - if (v !== null && v !== '') + if (!isConsideredEmpty(v)) this.parse('' + v, parsesQueryStrings, false); }, enumerable: true, @@ -1013,7 +1013,7 @@ Object.defineProperty(Url.prototype, 'auth', { return this._auth; }, set: function(v) { - this._auth = v === null ? null : '' + v; + this._auth = isConsideredEmpty(v) ? null : '' + v; this._href = ''; }, enumerable: true, @@ -1026,7 +1026,7 @@ Object.defineProperty(Url.prototype, 'host', { return this._host; }, set: function(v) { - if (v === null) { + if (isConsideredEmpty(v)) { this._port = -1; this._hostname = this._host = null; } else { @@ -1053,7 +1053,7 @@ Object.defineProperty(Url.prototype, 'hostname', { return this._hostname; }, set: function(v) { - if (v === null) { + if (isConsideredEmpty(v)) { this._hostname = null; if (this._hasValidPort()) @@ -1080,7 +1080,7 @@ Object.defineProperty(Url.prototype, 'hash', { return this._hash; }, set: function(v) { - if (v === null) { + if (isConsideredEmpty(v) || v === '#') { this._hash = null; } else { var hash = '' + v; @@ -1100,7 +1100,7 @@ Object.defineProperty(Url.prototype, 'search', { return this._search; }, set: function(v) { - if (v === null) { + if (isConsideredEmpty(v) || v === '?') { this._search = this._query = null; } else { var search = escapeSearch('' + v); @@ -1125,7 +1125,7 @@ Object.defineProperty(Url.prototype, 'pathname', { return this._pathname; }, set: function(v) { - if (v === null) { + if (isConsideredEmpty(v)) { this._pathname = null; } else { var pathname = escapePathName('' + v).replace(/\\/g, '/'); @@ -1144,6 +1144,10 @@ Object.defineProperty(Url.prototype, 'pathname', { configurable: true }); +function isConsideredEmpty(value) { + return value === null || value === undefined || value === ''; +} + // Search `char1` (integer code for a character) in `string` // starting from `fromIndex` and ending at `string.length - 1` // or when a stop character is found. |