Subject: bug#2435: Bug 2435

From: Chong Yidong <[email-masked]>
Date: Wed, 04 Mar 2009 23:09:48 -0500

Kenichi Handa <[email-masked]> writes:

> It seems that `pattern' is correct, but `bufp->buffer' is
> the compiled code for some of jkr-compr related regexp.
> Could you please find why that happens?

I think the problem is that regex_compile can call load_charset, which
can call regex_compile.  I think regex_compile is not designed to be
called recursively, leading to memory corruption.  Here is a backtrace
(I inserted some debugging code to detect when regex_compile is called
recursively):

#0  abort () at emacs.c:432
#1  0x08196965 in compile_pattern (pattern=139288251, regp=0x0, 
    translate=138358041, posix=0, multibyte=0) at search.c:262
#2  0x0819727d in fast_string_match (regexp=139288251, string=138555267)
    at search.c:509
#3  0x0817eb9f in Ffind_file_name_handler (filename=138555267, 
    operation=138416225) at fileio.c:380
#4  0x0817f5b3 in Fexpand_file_name (name=138555267, 
    default_directory=141645459) at fileio.c:859
#5  0x081fb92e in openp (path=138676461, str=138555267,
#suffixes=138926685, 
    storeptr=0x0, predicate=138358041) at lread.c:1425
#6  0x080b95f6 in load_charset_map_from_file (charset=0x84b4acc, 
    mapfile=138555267, control_flag=1) at charset.c:515
#7  0x080b9bb1 in load_charset (charset=0x84b4acc, control_flag=1)
    at charset.c:652
#8  0x080bdce8 in maybe_unify_char (c=1638542, val=138788937) at charset.c:1679
#9  0x080eb5fa in string_char (
    p=0x83560ac "\340\275\261\340\275\262-\340\275\275\340\276\200\340\276\201\340\276\204]*[\340\275\276\340\276\202\340\276\203\340\276\206-\340\276\213\340\274\231\340\274\265\340\274\267]*", advanced=0x0, len=0xbfc70d28)
    at character.c:236
#10 0x081a2ac9 in regex_compile (
    pattern=0x8356085 "[\340\275\200-\340\275\251\340\275\252][\340\276\220-\340\276\271\340\276\272\340\276\273\340\276\274]*[\340\275\260\366\220\202\216\340\275\261\340\275\262-\340\275\275\340\276\200\340\276\201\340\276\204]*[\340\275\276\340\276\202\340\276\203\340\276\206-\340\276\213\340\274\231\340\274\265\340\274\267]*", size=88, syntax=3408388, bufp=0x83e3210) at regex.c:2982
#11 0x081b3dca in re_compile_pattern (
    pattern=0x8356085 "[\340\275\200-\340\275\251\340\275\252][\340\276\220-\340\276\271\340\276\272\340\276\273\340\276\274]*[\340\275\260\366\220\202\216\340\275\261\340\275\262-\340\275\275\340\276\200\340\276\201\340\276\204]*[\340\275\276\340\276\202\340\276\203\340\276\206-\340\276\213\340\274\231\340\274\265\340\274\267]*", length=88, bufp=0x83e3210) at regex.c:6518
#12 0x08196714 in compile_pattern_1 (cp=0x83e3200, pattern=137244011, 
    translate=138358041, regp=0x0, posix=0) at search.c:160
#13 0x08196996 in compile_pattern (pattern=137244011, regp=0x0, 
    translate=138358041, posix=0, multibyte=1) at search.c:265