summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorPetka Antonov <petka_antonov@hotmail.com>2015-05-03 11:29:54 +0300
committerPetka Antonov <petka_antonov@hotmail.com>2015-05-03 11:29:54 +0300
commit66877216bd833face753d9a5d573ad477895d880 (patch)
treec0e510265d0a37f7d596d5e897e462c263256ba4 /lib
parentdbdd81a91bdce4cc59163e3be752dc3c53491987 (diff)
downloadandroid-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.js24
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.