@@ -168,19 +168,20 @@ async function updateRegexRules(currentRules, addRules, removeRuleIds) {
168168
169169async function updateDynamicRules ( ) {
170170 const currentRules = await dnr . getDynamicRules ( ) ;
171- const addRules = [ ] ;
172- const removeRuleIds = [ ] ;
173171
174172 // Remove potentially left-over rules from previous version
173+ const removeRuleIds = [ ] ;
175174 for ( const rule of currentRules ) {
176175 if ( rule . id >= SPECIAL_RULES_REALM ) { continue ; }
177176 removeRuleIds . push ( rule . id ) ;
178177 rule . id = 0 ;
179178 }
180179
180+ const addRules = [ ] ;
181181 await updateRegexRules ( currentRules , addRules , removeRuleIds ) ;
182182 if ( addRules . length === 0 && removeRuleIds . length === 0 ) { return ; }
183183
184+ const dynamicRegexCountBefore = dynamicRegexCount ;
184185 dynamicRegexCount = 0 ;
185186 let ruleId = 1 ;
186187 for ( const rule of addRules ) {
@@ -190,6 +191,11 @@ async function updateDynamicRules() {
190191 if ( dynamicRegexCount !== 0 ) {
191192 ubolLog ( `Using ${ dynamicRegexCount } /${ dnr . MAX_NUMBER_OF_REGEX_RULES } dynamic regex-based DNR rules` ) ;
192193 }
194+ // If we increase the number of dynamic regex rules, reset session rules to
195+ // reduce risk of hitting maximum regex count
196+ if ( dynamicRegexCount > dynamicRegexCountBefore ) {
197+ await clearSessionRules ( ) ;
198+ }
193199
194200 const response = { } ;
195201
@@ -339,8 +345,11 @@ async function updateSessionRules() {
339345 let regexCount = dynamicRegexCount ;
340346 let ruleId = 1 ;
341347 for ( const rule of addRulesUnfiltered ) {
342- if ( rule ?. condition . regexFilter ) { regexCount += 1 ; }
343- rule . id = regexCount < maxRegexCount ? ruleId ++ : 0 ;
348+ rule . id = ruleId ++ ;
349+ if ( Boolean ( rule ?. condition . regexFilter ) === false ) { continue ; }
350+ regexCount += 1 ;
351+ if ( regexCount < maxRegexCount ) { continue ; }
352+ rule . id = 0 ;
344353 }
345354 sessionRegexCount = regexCount - dynamicRegexCount ;
346355 const addRules = addRulesUnfiltered . filter ( a => a . id !== 0 ) ;
@@ -367,6 +376,13 @@ async function updateSessionRules() {
367376 return response ;
368377}
369378
379+ async function clearSessionRules ( ) {
380+ const currentRules = await dnr . getSessionRules ( ) ;
381+ if ( currentRules . length === 0 ) { return ; }
382+ const removeRuleIds = currentRules . map ( a => a . id ) ;
383+ return dnr . updateSessionRules ( { removeRuleIds } ) ;
384+ }
385+
370386/******************************************************************************/
371387
372388async function getEffectiveSessionRules ( ) {
0 commit comments