Skip to content

Commit ff41aed

Browse files
committed
maybe this will address gorhill#150
1 parent 6c80790 commit ff41aed

2 files changed

Lines changed: 45 additions & 3 deletions

File tree

src/js/uritools.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,10 @@ var reIPAddressNaive = /^\d+\.\d+\.\d+\.\d+$|^\[[\da-zA-Z:]+\]$/;
7272

7373
// Accurate tests
7474
// Source.: http://stackoverflow.com/questions/5284147/validating-ipv4-addresses-with-regexp/5284410#5284410
75-
var reIPv4 = /^((25[0-5]|2[0-4]\d|[01]?\d\d?)(\.|$)){4}/;
75+
//var reIPv4 = /^((25[0-5]|2[0-4]\d|[01]?\d\d?)(\.|$)){4}/;
7676

7777
// Source: http://forums.intermapper.com/viewtopic.php?p=1096#1096
78-
var reIPv6 = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/;
78+
//var reIPv6 = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/;
7979

8080
/******************************************************************************/
8181

@@ -366,11 +366,18 @@ var domainCachePrune = function() {
366366
}
367367
};
368368

369+
var domainCacheReset = function() {
370+
domainCache = {};
371+
domainCacheCount = 0;
372+
};
373+
369374
var domainCache = {};
370375
var domainCacheCount = 0;
371376
var domainCacheCountLowWaterMark = 75;
372377
var domainCacheCountHighWaterMark = 100;
373378

379+
psl.onModified.addListener(domainCacheReset);
380+
374381
/******************************************************************************/
375382

376383
URI.domainFromURI = function(uri) {

src/lib/publicsuffixlist.js

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333

3434
;(function(root) {
3535

36+
'use strict';
37+
3638
/******************************************************************************/
3739

3840
var exceptions = {};
@@ -45,6 +47,8 @@ var selfieMagic = 'iscjsfsaolnm';
4547
var cutoffLength = 256;
4648
var mustPunycode = /[^a-z0-9.-]/;
4749

50+
var onModifyListeners = [];
51+
4852
/******************************************************************************/
4953

5054
// In the context of this code, a domain is defined as:
@@ -234,6 +238,8 @@ function parse(text, toAscii) {
234238
}
235239
crystallize(exceptions);
236240
crystallize(rules);
241+
242+
callListeners(onModifyListeners);
237243
}
238244

239245
/******************************************************************************/
@@ -302,11 +308,39 @@ function fromSelfie(selfie) {
302308
}
303309
rules = selfie.rules;
304310
exceptions = selfie.exceptions;
311+
callListeners(onModifyListeners);
305312
return true;
306313
}
307314

308315
/******************************************************************************/
309316

317+
var callListeners = function(listeners) {
318+
for ( var i = 0; i < listeners.length; i++ ) {
319+
listeners[i]();
320+
}
321+
};
322+
323+
/******************************************************************************/
324+
325+
var onModified = {
326+
addListener: function(callback) {
327+
if (
328+
typeof callback === 'function' &&
329+
onModifyListeners.indexOf(callback) === -1
330+
) {
331+
onModifyListeners.push(callback);
332+
}
333+
},
334+
removeListener: function(callback) {
335+
var pos = onModifyListeners.indexOf(callback);
336+
if ( pos !== -1 ) {
337+
onModifyListeners.splice(pos, 1);
338+
}
339+
}
340+
};
341+
342+
/******************************************************************************/
343+
310344
// Public API
311345

312346
root = root || window;
@@ -317,7 +351,8 @@ root.publicSuffixList = {
317351
'getDomain': getDomain,
318352
'getPublicSuffix': getPublicSuffix,
319353
'toSelfie': toSelfie,
320-
'fromSelfie': fromSelfie
354+
'fromSelfie': fromSelfie,
355+
'onModified': onModified
321356
};
322357

323358
/******************************************************************************/

0 commit comments

Comments
 (0)