|
From: | Reuben Thomas |
Subject: | Re: Test for regex module hangs |
Date: | Thu, 31 Jan 2013 22:13:40 +0000 |
Specifically, the re_search call. Great that it finds the bug, pity that it causes configure to hang…The test that is causing this error is:When running the test for working re_compile_pattern, I get a hang; attaching to the process gives me:I have glibc 2.15 on my Ubuntu system.
(gdb) where
#0 __lll_lock_wait_private () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:93
#1 0x00002ab6dd5c6221 in _L_lock_10625 () at malloc.c:5209
#2 0x00002ab6dd5c3fa7 in __GI___libc_malloc (bytes=46964889589568) at malloc.c:2921
#3 0x00002ab6dd32495e in local_strdup (s=0x2ab6ddc00ad8 "/lib/x86_64-linux-gnu/libgcc_s.so.1") at dl-load.c:162
#4 _dl_map_object (loader=0x2ab6dd33f4c0, name=0x2ab6dd6ba2b8 "libgcc_s.so.1", type=2, trace_mode=0,
mode=-1879048191, nsid=<optimised out>) at dl-load.c:2473
#5 0x00002ab6dd32f85b in dl_open_worker (a=0x7fff5cdce1a0) at dl-open.c:225
#6 0x00002ab6dd32b186 in _dl_catch_error (objname=0x7fff5cdce1e8, errstring=0x7fff5cdce1f0,
mallocedp=0x7fff5cdce1ff, operate=0x2ab6dd32f710 <dl_open_worker>, args=0x7fff5cdce1a0) at dl-error.c:178
#7 0x00002ab6dd32f32a in _dl_open (file=0x2ab6dd6ba2b8 "libgcc_s.so.1", mode=-2147483647,
caller_dlopen=0x2ab6dd64ba69 <__GI___backtrace+217>, nsid=-2, argc=1, argv=<optimised out>, env=0x7fff5cdcf408)
at dl-open.c:639
#8 0x00002ab6dd671622 in do_dlopen (ptr=0x7fff5cdce3a0) at dl-libc.c:89
#9 0x00002ab6dd32b186 in _dl_catch_error (objname=0x7fff5cdce3d0, errstring=0x7fff5cdce3c0,
mallocedp=0x7fff5cdce3df, operate=0x2ab6dd6715e0 <do_dlopen>, args=0x7fff5cdce3a0) at dl-error.c:178
#10 0x00002ab6dd6716e4 in dlerror_run (args=0x7fff5cdce3a0, operate=0x2ab6dd6715e0 <do_dlopen>) at dl-libc.c:48
#11 __GI___libc_dlopen_mode (name=<optimised out>, mode=<optimised out>) at dl-libc.c:165
#12 0x00002ab6dd64ba69 in init () at ../sysdeps/x86_64/../ia64/backtrace.c:53
#13 __GI___backtrace (array=<optimised out>, size=64) at ../sysdeps/x86_64/../ia64/backtrace.c:104
#14 0x00002ab6dd5b53af in __libc_message (do_abort=2, fmt=0x2ab6dd6bf028 "*** glibc detected *** %s: %s: 0x%s ***\n")
at ../sysdeps/unix/sysv/linux/libc_fatal.c:180
#15 0x00002ab6dd5bfb96 in malloc_printerr (action="" str=0x2ab6dd6bb9b2 "malloc(): memory corruption",
ptr=<optimised out>) at malloc.c:5007
#16 0x00002ab6dd5c1cfb in _int_malloc (av=0x2ab6dd8f9740 <main_arena>, bytes=88) at malloc.c:3555
#17 0x00002ab6dd5c5365 in __libc_calloc (n=<optimised out>, elem_size=<optimised out>) at malloc.c:3274
#18 0x00002ab6dd6161a4 in create_cd_newstate (hash=4, context=0, nodes=0x7fff5cdcf090, dfa=<optimised out>)
at regex_internal.c:1672
#19 re_acquire_state_context (err=0x7fff5cdcf0c0, dfa=<optimised out>, nodes=0x7fff5cdcf090, context=0)
at regex_internal.c:1547
#20 0x00002ab6dd61c9e1 in transit_state_mb (mctx=0x7fff5cdcefa0, pstate=<optimised out>) at regexec.c:2561
#21 transit_state (state=0x1839340, mctx=0x7fff5cdcefa0, err=0x7fff5cdcf0b0) at regexec.c:2272
#22 check_matching (p_match_first=0x7fff5cdcf0a0, fl_longest_match=1, mctx=0x7fff5cdcefa0) at regexec.c:1158
#23 re_search_internal (preg=0x6010a0 <regex.4073>, string=0x400d00 <data.4081> "x", length=25,
start=<optimised out>, range=25, stop=<optimised out>, nmatch=<optimised out>, pmatch=0x18372f0, eflags=0)
at regexec.c:829
#24 0x00002ab6dd6210ec in re_search_stub (bufp=0x6010a0 <regex.4073>, string=0x400d00 <data.4081> "x",
length=<optimised out>, start=0, range=<optimised out>, stop=<optimised out>, regs=0x0, ret_len=0)
at regexec.c:449
#25 0x00002ab6dd621b58 in __re_search (bufp=<optimised out>, string=<optimised out>, length=<optimised out>,
start=<optimised out>, range=<optimised out>, regs=<optimised out>) at regexec.c:312
#26 0x000000000040083a in main () at conftest.c:190
{
/* This test is from glibc bug 15078.
The test case is from Andreas Schwab in
<http://www.sourceware.org/ml/libc-alpha/2013-01/msg00967.html>.
*/
static char const pat[] = "[^x]x";
static char const data[] =
"\xe1\x80\x80\xe1\x80\xbb\xe1\x80\xbd\xe1\x80\x94\xe1\x80"
"\xba\xe1\x80\xaf\xe1\x80\x95\xe1\x80\xbax";
re_set_syntax (0);
memset (®ex, 0, sizeof regex);
s = re_compile_pattern (pat, sizeof pat - 1, ®ex);
if (s)
result |= 1;
else if (re_search (®ex, data, sizeof data - 1,
0, sizeof data - 1, 0)
!= 20)
result |= 1;
}
[Prev in Thread] | Current Thread | [Next in Thread] |