diff --git a/lib/internal/constants.js b/lib/internal/constants.js index 6fc16e57d95f65..5c884ae6bc4a7f 100644 --- a/lib/internal/constants.js +++ b/lib/internal/constants.js @@ -39,6 +39,8 @@ module.exports = { CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */ CHAR_GRAVE_ACCENT: 96, /* ` */ CHAR_AT: 64, /* @ */ + CHAR_AMPERSAND: 38, /* & */ + CHAR_EQUAL: 61, /* = */ // Digits CHAR_0: 48, /* 0 */ diff --git a/lib/internal/url.js b/lib/internal/url.js index 1513b14e8297c3..21c7c734b58475 100644 --- a/lib/internal/url.js +++ b/lib/internal/url.js @@ -19,6 +19,14 @@ const { ERR_INVALID_URL_SCHEME, ERR_MISSING_ARGS } = require('internal/errors').codes; +const { + CHAR_PERCENT, + CHAR_PLUS, + CHAR_AMPERSAND, + CHAR_EQUAL, + CHAR_LOWERCASE_A, + CHAR_LOWERCASE_Z, +} = require('internal/constants'); const querystring = require('querystring'); const { platform } = process; @@ -712,7 +720,7 @@ function parseParams(qs) { const code = qs.charCodeAt(i); // Try matching key/value pair separator - if (code === 38/* & */) { + if (code === CHAR_AMPERSAND) { if (pairStart === i) { // We saw an empty substring between pair separators lastPos = pairStart = i + 1; @@ -738,7 +746,7 @@ function parseParams(qs) { } // Try matching key/value separator (e.g. '=') if we haven't already - if (!seenSep && code === 61/* = */) { + if (!seenSep && code === CHAR_EQUAL) { // Key/value separator match! if (lastPos < i) buf += qs.slice(lastPos, i); @@ -755,7 +763,7 @@ function parseParams(qs) { } // Handle + and percent decoding. - if (code === 43/* + */) { + if (code === CHAR_PLUS) { if (lastPos < i) buf += qs.slice(lastPos, i); buf += ' '; @@ -763,7 +771,7 @@ function parseParams(qs) { } else if (!encoded) { // Try to match an (valid) encoded byte (once) to minimize unnecessary // calls to string decoding functions - if (code === 37/* % */) { + if (code === CHAR_PERCENT) { encodeCheck = 1; } else if (encodeCheck > 0) { // eslint-disable-next-line no-extra-boolean-cast @@ -1357,7 +1365,7 @@ function getPathFromURLWin32(url) { // Otherwise, it's a local path that requires a drive letter var letter = pathname.codePointAt(1) | 0x20; var sep = pathname[2]; - if (letter < 97 || letter > 122 || // a..z A..Z + if (letter < CHAR_LOWERCASE_A || letter > CHAR_LOWERCASE_Z || // a..z A..Z (sep !== ':')) { throw new ERR_INVALID_FILE_URL_PATH('must be absolute'); }