From 8f1b4b52fde58c60210bdd404c2c68211a66457f Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Thu, 9 Aug 2018 11:31:25 -0400 Subject: [PATCH] fix #3606 --- src/js/utils.js | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/js/utils.js b/src/js/utils.js index 89e2c4e0e..46442a880 100644 --- a/src/js/utils.js +++ b/src/js/utils.js @@ -422,16 +422,6 @@ let reHostnameVeryCoarse = /[g-z_-]/; let reIPv4VeryCoarse = /\.\d+$/; - let isIPAddress = function(hostname) { - if ( reHostnameVeryCoarse.test(hostname) ) { - return false; - } - if ( reIPv4VeryCoarse.test(hostname) ) { - return true; - } - return hostname.startsWith('['); - }; - let toBroaderHostname = function(hostname) { let pos = hostname.indexOf('.'); if ( pos !== -1 ) { @@ -440,15 +430,30 @@ return hostname !== '*' && hostname !== '' ? '*' : ''; }; - let toBroaderIPAddress = function(ipaddress) { + let toBroaderIPv4Address = function(ipaddress) { + if ( ipaddress === '*' || ipaddress === '' ) { return ''; } + let pos = ipaddress.lastIndexOf('.'); + if ( pos === -1 ) { return '*'; } + return ipaddress.slice(0, pos); + }; + + let toBroaderIPv6Address = function(ipaddress) { return ipaddress !== '*' && ipaddress !== '' ? '*' : ''; }; return function decomposeHostname(hostname, decomposed) { if ( decomposed.length === 0 || decomposed[0] !== hostname ) { - let broaden = isIPAddress(hostname) ? - toBroaderIPAddress : - toBroaderHostname; + let broaden; + if ( reHostnameVeryCoarse.test(hostname) === false ) { + if ( reIPv4VeryCoarse ) { + broaden = toBroaderIPv4Address; + } else if ( hostname.startsWith('[') ) { + broaden = toBroaderIPv6Address; + } + } + if ( broaden === undefined ) { + broaden = toBroaderHostname; + } decomposed[0] = hostname; let i = 1; for (;;) {