Skip to content

Stack exhausted in the Nfa #98

@ArtemGr

Description

@ArtemGr

So with the latest crates.io regex crates I got this:

(gdb) bt
#0  0x0000555555dfafae in rust_stack_exhausted ()
#1  0x00005555556a96a9 in __morestack ()
#2  0x0000555555ad8db6 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=167, at=...) at src/crates/by_db/../../by_db.rs:481
#3  0x0000555555ad8cae in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=165, at=...) at src/crates/by_db/../../by_db.rs:481
#4  0x0000555555ad8b61 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=163, at=...) at src/crates/by_db/../../by_db.rs:481
#5  0x0000555555ad8a14 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=161, at=...) at src/crates/by_db/../../by_db.rs:481
#6  0x0000555555ad88c7 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=159, at=...) at src/crates/by_db/../../by_db.rs:481
#7  0x0000555555ad877a in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=157, at=...) at src/crates/by_db/../../by_db.rs:481
#8  0x0000555555ad862d in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=155, at=...) at src/crates/by_db/../../by_db.rs:481
#9  0x0000555555ad84e0 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=153, at=...) at src/crates/by_db/../../by_db.rs:481
#10 0x0000555555ad8393 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=151, at=...) at src/crates/by_db/../../by_db.rs:481
#11 0x0000555555ad8246 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=149, at=...) at src/crates/by_db/../../by_db.rs:481
#12 0x0000555555ad80f9 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=147, at=...) at src/crates/by_db/../../by_db.rs:481
#13 0x0000555555ad7fac in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=145, at=...) at src/crates/by_db/../../by_db.rs:481
#14 0x0000555555ad7e5f in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=143, at=...) at src/crates/by_db/../../by_db.rs:481
#15 0x0000555555ad7d12 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=141, at=...) at src/crates/by_db/../../by_db.rs:481
#16 0x0000555555ad7bc5 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=139, at=...) at src/crates/by_db/../../by_db.rs:481
#17 0x0000555555ad7a78 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=137, at=...) at src/crates/by_db/../../by_db.rs:481
#18 0x0000555555ad792b in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=135, at=...) at src/crates/by_db/../../by_db.rs:481
#19 0x0000555555ad77de in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=133, at=...) at src/crates/by_db/../../by_db.rs:481
#20 0x0000555555ad7691 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=131, at=...) at src/crates/by_db/../../by_db.rs:481
#21 0x0000555555ad7544 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=129, at=...) at src/crates/by_db/../../by_db.rs:481
#22 0x0000555555ad73f7 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=127, at=...) at src/crates/by_db/../../by_db.rs:481
#23 0x0000555555ad72aa in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=125, at=...) at src/crates/by_db/../../by_db.rs:481
#24 0x0000555555ad715d in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=123, at=...) at src/crates/by_db/../../by_db.rs:481
#25 0x0000555555ad7010 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=121, at=...) at src/crates/by_db/../../by_db.rs:481
#26 0x0000555555ad6ec3 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=119, at=...) at src/crates/by_db/../../by_db.rs:481
#27 0x0000555555ad6d76 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=117, at=...) at src/crates/by_db/../../by_db.rs:481
#28 0x0000555555ad6c29 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=115, at=...) at src/crates/by_db/../../by_db.rs:481
#29 0x0000555555ad6adc in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=113, at=...) at src/crates/by_db/../../by_db.rs:481
#30 0x0000555555ad698f in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=111, at=...) at src/crates/by_db/../../by_db.rs:481
#31 0x0000555555ad6842 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=109, at=...) at src/crates/by_db/../../by_db.rs:481
#32 0x0000555555ad66f5 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=107, at=...) at src/crates/by_db/../../by_db.rs:481
#33 0x0000555555ad65a8 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=105, at=...) at src/crates/by_db/../../by_db.rs:481
#34 0x0000555555ad645b in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=103, at=...) at src/crates/by_db/../../by_db.rs:481
#35 0x0000555555ad630e in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=101, at=...) at src/crates/by_db/../../by_db.rs:481
#36 0x0000555555ad61c1 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=99, at=...) at src/crates/by_db/../../by_db.rs:481
#37 0x0000555555ad6074 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=97, at=...) at src/crates/by_db/../../by_db.rs:481
#38 0x0000555555ad5f27 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=95, at=...) at src/crates/by_db/../../by_db.rs:481
#39 0x0000555555ad5dda in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=93, at=...) at src/crates/by_db/../../by_db.rs:481
#40 0x0000555555ad5c8d in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=91, at=...) at src/crates/by_db/../../by_db.rs:481
#41 0x0000555555ad5b40 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=89, at=...) at src/crates/by_db/../../by_db.rs:481
#42 0x0000555555ad59f3 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=87, at=...) at src/crates/by_db/../../by_db.rs:481
#43 0x0000555555ad58a6 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=85, at=...) at src/crates/by_db/../../by_db.rs:481
#44 0x0000555555ad5759 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=83, at=...) at src/crates/by_db/../../by_db.rs:481
#45 0x0000555555ad560c in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=81, at=...) at src/crates/by_db/../../by_db.rs:481
#46 0x0000555555ad54bf in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=79, at=...) at src/crates/by_db/../../by_db.rs:481
#47 0x0000555555ad5372 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=77, at=...) at src/crates/by_db/../../by_db.rs:481
#48 0x0000555555ad5225 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=75, at=...) at src/crates/by_db/../../by_db.rs:481
#49 0x0000555555ad50d8 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=73, at=...) at src/crates/by_db/../../by_db.rs:481
#50 0x0000555555ad4f8b in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=71, at=...) at src/crates/by_db/../../by_db.rs:481
#51 0x0000555555ad4e3e in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=69, at=...) at src/crates/by_db/../../by_db.rs:481
#52 0x0000555555ad4cf1 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=67, at=...) at src/crates/by_db/../../by_db.rs:481
#53 0x0000555555ad4ba4 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=65, at=...) at src/crates/by_db/../../by_db.rs:481
#54 0x0000555555ad4a57 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=63, at=...) at src/crates/by_db/../../by_db.rs:481
#55 0x0000555555ad490a in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=61, at=...) at src/crates/by_db/../../by_db.rs:481
#56 0x0000555555ad47bd in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=59, at=...) at src/crates/by_db/../../by_db.rs:481
#57 0x0000555555ad4670 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=57, at=...) at src/crates/by_db/../../by_db.rs:481
#58 0x0000555555ad4523 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=55, at=...) at src/crates/by_db/../../by_db.rs:481
#59 0x0000555555ad43d6 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=53, at=...) at src/crates/by_db/../../by_db.rs:481
#60 0x0000555555ad4289 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=51, at=...) at src/crates/by_db/../../by_db.rs:481
#61 0x0000555555ad413c in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=49, at=...) at src/crates/by_db/../../by_db.rs:481
#62 0x0000555555ad3fef in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=47, at=...) at src/crates/by_db/../../by_db.rs:481
#63 0x0000555555ad3ea2 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=45, at=...) at src/crates/by_db/../../by_db.rs:481
#64 0x0000555555ad3d55 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=43, at=...) at src/crates/by_db/../../by_db.rs:481
#65 0x0000555555ad3c08 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=41, at=...) at src/crates/by_db/../../by_db.rs:481
#66 0x0000555555ad3abb in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=39, at=...) at src/crates/by_db/../../by_db.rs:481
#67 0x0000555555ad396e in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=37, at=...) at src/crates/by_db/../../by_db.rs:481
#68 0x0000555555ad3821 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=35, at=...) at src/crates/by_db/../../by_db.rs:481
#69 0x0000555555ad36d4 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=33, at=...) at src/crates/by_db/../../by_db.rs:481
#70 0x0000555555ad3587 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=31, at=...) at src/crates/by_db/../../by_db.rs:481
#71 0x0000555555ad343a in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=29, at=...) at src/crates/by_db/../../by_db.rs:481
#72 0x0000555555ad32ed in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=27, at=...) at src/crates/by_db/../../by_db.rs:481
#73 0x0000555555ad31a0 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=25, at=...) at src/crates/by_db/../../by_db.rs:481
#74 0x0000555555ad3053 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=23, at=...) at src/crates/by_db/../../by_db.rs:481
#75 0x0000555555ad2f06 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=21, at=...) at src/crates/by_db/../../by_db.rs:481
#76 0x0000555555ad2db9 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=19, at=...) at src/crates/by_db/../../by_db.rs:481
#77 0x0000555555ad2c6c in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=17, at=...) at src/crates/by_db/../../by_db.rs:481
#78 0x0000555555ad2b1f in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=15, at=...) at src/crates/by_db/../../by_db.rs:481
---Type <return> to continue, or q <return> to quit---
#79 0x0000555555ad29d2 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=13, at=...) at src/crates/by_db/../../by_db.rs:481
#80 0x0000555555ad2885 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=11, at=...) at src/crates/by_db/../../by_db.rs:481
#81 0x0000555555ad2738 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=9, at=...) at src/crates/by_db/../../by_db.rs:481
#82 0x0000555555ad25eb in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=7, at=...) at src/crates/by_db/../../by_db.rs:481
#83 0x0000555555ad249e in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=5, at=...) at src/crates/by_db/../../by_db.rs:481
#84 0x0000555555ad2351 in by_db::log_sql::exec::Nfa<'t>::add (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, thread_caps=..., pc=3, at=...) at src/crates/by_db/../../by_db.rs:481
#85 0x0000555555ae04ac in by_db::log_sql::exec::Nfa<'t>::step (self=0x7fffeebf8ad0, nlist=0x7fffeebf6878, caps=..., thread_caps=..., pc=2, at=..., at_next=...)
    at src/crates/by_db/../../by_db.rs:481
#86 0x0000555555ad0c3a in by_db::log_sql::exec::Nfa<'t>::exec (self=0x7fffeebf8ad0, q=0x7fffeebf4620, caps=..., at=...) at src/crates/by_db/../../by_db.rs:481
#87 0x0000555555acc955 in by_db::log_sql::exec (caps=..., input=..., start=0) at src/crates/by_db/../../by_db.rs:481
#88 0x0000555555da8539 in regex::re::exec (re=0x7fffeebf9030, caps=..., text=..., start=0)
    at /home/grank/.cargo/registry/src/github.com-0a35038f75765ae4/regex-0.1.38/src/re.rs:1145
#89 0x0000555555da8771 in regex::re::Regex::captures (self=0x7fffeebf9030, text=...) at /home/grank/.cargo/registry/src/github.com-0a35038f75765ae4/regex-0.1.38/src/re.rs:409
#90 0x0000555555ac0a30 in by_db::log_sql (sql=..., ffi_or_rust=..., hit_or_miss=..., ttl_sec=7200) at src/crates/by_db/../../by_db.rs:481

The code:

fn log_sql (sql: &str, ffi_or_rust: &str, hit_or_miss: &str, ttl_sec: u32) {
  let short_sql = regex! (r"\r\n") .replace_all (sql, "");
  let short_sql = regex! (r"\s+") .replace_all (&short_sql, " ");
  // NB: Using regex to shorten the string because there might be Unicode characters in it.
  if let Some (short_sql) = regex! (r"^.{1,90}") .captures (&short_sql) {
    if let Some (short_sql) = short_sql.at (0) {
      log! ("cached_*] {kind} {hit} ({sql}){ttl}.",
        kind = ffi_or_rust, hit = hit_or_miss, sql = short_sql,
        ttl = if hit_or_miss == "miss" {format! (" {}", ttl_sec)} else {String::new()});}}}

The error seems to happen in the ^.{1,90} regex.

regex 0.1.38; regex_macros 0.1.20; rustc 1.3.0-nightly (faa04a8b9 2015-06-30)

Interesting?

P.S. Decreasing the range of accepted characters (to {1,70}) works, but I wonder why didn't it happened before. Is it a smaller stack in the nightly Rust or a different implementation of the regex?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions