[SR-Users] Regex module having trouble with large regex expressions in kamailio 4.4.5

Tim Balmer t.balmer at edutel.nl
Thu Mar 23 09:05:34 CET 2017


Hi,

I discovered some strange behavior from the regex module yesterday (kamailio version 4.4.5). 

For example we have the phone number 0033755500381 that we try to match with the following kamailio code:

	#!define REGEX_FF_NEG_INTERNATIONAL    "6"
	...
	if (pcre_match_group("$rU", REGEX_FF_NEG_INTERNATIONAL))
	{
		# Do something
	}

When the content of our regex groups file is like this:

	[6]
	^(\+|00)3(0690|0693|0694|0695|0697|0698|0699|36|37|4160|46|47|51160|511691|511693|511696|511891|511893|511896|513|516091|5160921|516093|516096|516391|516392|516393|516396|516591|516592|516593|516596|516691|5166921|516693|516696|5191|5192|5193|5196|538|54388|543	89|546|5475|5477|548|567117|5672|5677|5679|5692|5694|5696|5698|5699|5795|5796|5797|5799|58299|584|5850|5948|5987|5988|5989|59988|59989|620|630|631|670|706|712|725|728|774|776|8591|8592|8595|8597|8598|8599|8620|8621|8630|8631|8640|8641|8643|8649|8650|8651|8660|	8661|8664|8670|8671|869814|906698|93)

The above if statment is not matching, although it should match according to any regex validator (for example https://regex101.com/ )

But when I split the above regex in smaller parts, like this:

	[6]
	^(\+|00)306(90|93|94|95|97|98|99)
	^(\+|00)336
	^(\+|00)337
	^(\+|00)34160
	^(\+|00)346
	^(\+|00)347
	^(\+|00)351(160|1691|1693|1696|1891|1893|1896|3|6091|60921|6093|6096|6391|6392|6393|6396|6591|6592|6593|6596|6691|66921|6693|6696|91|92|93|96)
	^(\+|00)3538
	^(\+|00)354(388|389|6|75|77|8)
	^(\+|00)356(7117|72|77|79|92|94|96|98|99)
	^(\+|00)357(95|96|97|99)
	^(\+|00)358(299|4|50)
	^(\+|00)359(48|87|88|89|988|989)
	^(\+|00)3620
	^(\+|00)363(0|1)
	^(\+|00)3670
	^(\+|00)3706
	^(\+|00)3712
	^(\+|00)372(5|8)
	^(\+|00)377(4|6)
	^(\+|00)385(91|92|95|97|98|99)
	^(\+|00)386(20|21|30|31|40|41|43|49|50|51|60|61|64|70|71|9814)
	^(\+|00)3906698
	^(\+|00)393

Then the exact same regex module call as before does result in a match as expected.

So to me it looks like the regex module is having trouble with large regex expressions, I did check the logs but there is nothing strange there, that means also the large expression is correctly loaded according to the logs while in fact it is not working. Checked the regex module documentation but there I cannot find any limits regarding to the size of invididual expressions. 

Is it me missing something or did I discover a bug in de regex module?


Best Regards,

Tim Balmer
Edutel BV



More information about the sr-users mailing list