regexp match loop on ^+

Fredrik Thulin ft@REDACTED
Tue Apr 13 18:38:56 CEST 2004


Hi

Magnus Ahltorp long ago implemented ENUM (RFC2916) support in Yxa.
ENUM lets you enter for example a SIP URI equivalent with an E.164 number in 
DNS and uses regexps to make it possible to for example have DNS wildcard 
entrys for your phone numbers. Magnus then found a little implementation 
problem in implementing it in Erlang, because RFC2916 has examples containing 
^+. On the last IETF there were a bit of talk about this. As far as I have 
heard, ^+ is not invalid but it is very implementation dependent how well it 
works. In Erlang, that is not very well :(

>From RFC2916 :

   3.2.3 Example 3

        $ORIGIN 6.4.e164.arpa.
           * IN NAPTR 100 10 "u" "ldap+E2U" "!^+46(.*)$!ldap://ldap.se/cn=01!"
   .

Tests :

1> regexp:match("+461234", "+46(.*)$").
{error,{illegal,"+"}}
2> regexp:match("+461234", "\\+46(.*)$").
{match,1,7}
3> regexp:match("+461234", "^+46(.*)$").

On the third one, Erlang (R9C-0) regexp implementation loops.
regexp.erl was too complex for me to fix this myself, so I though I'd
raise the issue on the list so that someone else might perhaps at
least prevent the loop.

/Fredrik




More information about the erlang-questions mailing list