[erlang-questions] Why the code will make erlang crash?

Raimo Niskanen <>
Thu Nov 15 09:18:39 CET 2007


Must be a bug in the regexp module. The regexp code seems to go
into an infinite loop and eats all memory:

$ erl 
Erlang (BEAM) emulator version 5.5.5.5 [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.5.5.5  (abort with ^G)
1> regexp:match("hello", "*lo*").
{error,{illegal,"*"}}
2> regexp:match("hello", "^*lo*").

BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
       (v)ersion (k)ill (D)b-tables (d)istribution


"*lo*" is regarded as an illegal pattern, but
"^*lo*", the same left anchored spins forever.


I think what you ment was:
regexp:match("hello", "^.*lo.*").

The ^* does not make sense; zero or more beginning
of string.



On Thu, Nov 15, 2007 at 03:18:49PM +0800, LUKE wrote:
> -module(libstr).
> -export([exists/2]).
> 
> exists(String,MString)->
>     case regexp:match(String,"(^" ++ MString ++ "*)") of
>         {match,_,_}->true;
>         nomatch->false;
>         {error,Why}->Why
>       end.   
> 
> =============================================
> 4> libstr:exists("hello","hel").
> true
> 
> 5> libstr:exists("hello","lo").
> false
> 
> 6> libstr:exists("hello","lo*").
> false
> 
> 7> libstr:exists("hello","*lo").
> 
> 
> Crash dump was written to: erl_crash.dump
> eheap_alloc: Cannot allocate 1140328500 bytes of memory (of type "heap").
> 
> This application has requested the Runtime to terminate it in an unusual way.
> Please contact the application's support team for more information.
> _______________________________________________
> erlang-questions mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-questions

-- 

/ Raimo Niskanen, Erlang/OTP, Ericsson AB



More information about the erlang-questions mailing list