Menu

#140 optimized lookup in regular lookup segfaults on some epsilon stuff

future
open
1
2015-02-25
2012-11-05
No

The stack looks a bit like this:
Program received signal SIGSEGV, Segmentation fault.
hfst_ol::Transducer::get_analyses (this=0x691e60, input_symbol=0x6ba570,
output_symbol=0x6cf376, original_output_tape=0x6bf3a0, i=3485)
at optimized-lookup/transducer.cc:382
382 {
(gdb) bt

0 hfst_ol::Transducer::get_analyses (this=0x691e60, input_symbol=0x6ba570,

output_symbol=0x6cf376, original_output_tape=0x6bf3a0, i=3485)
at optimized-lookup/transducer.cc:382

1 0x00007ffff7ae85d1 in hfst_ol::Transducer::try_epsilon_transitions (

this=0x691e60, input_symbol=0x6ba570, output_symbol=0x6cf374, 
original_output_tape=0x6bf3a0, i=172105)
at optimized-lookup/transducer.cc:280

2 0x00007ffff7ae811b in hfst_ol::Transducer::get_analyses (this=0x691e60,

input_symbol=0x6ba570, output_symbol=0x6cf374, 
original_output_tape=0x6bf3a0, i=3485)
at optimized-lookup/transducer.cc:420

3 0x00007ffff7ae85d1 in hfst_ol::Transducer::try_epsilon_transitions (

this=0x691e60, input_symbol=0x6ba570, output_symbol=0x6cf372, 
original_output_tape=0x6bf3a0, i=172105)
at optimized-lookup/transducer.cc:280

4 0x00007ffff7ae811b in hfst_ol::Transducer::get_analyses (this=0x691e60,

input_symbol=0x6ba570, output_symbol=0x6cf372, 
original_output_tape=0x6bf3a0, i=3485)

...

265 0x00007ffff7ae85d1 in hfst_ol::Transducer::try_epsilon_transitions (

this=0x691e60, input_symbol=0x6ba570, output_symbol=0x6cf26c, 
original_output_tape=0x6bf3a0, i=172105)
at optimized-lookup/transducer.cc:280

266 0x00007ffff7ae811b in hfst_ol::Transducer::get_analyses (this=0x691e60,

input_symbol=0x6ba570, output_symbol=0x6cf26c, 
original_output_tape=0x6bf3a0, i=3485)
at optimized-lookup/transducer.cc:420

267 0x00007ffff7ae85d1 in hfst_ol::Transducer::try_epsilon_transitions (

this=0x691e60, input_symbol=0x6ba570, output_symbol=0x6cf26a, 
original_output_tape=0x6bf3a0, i=172105)
at optimized-lookup/transducer.cc:280

268 0x00007ffff7ae811b in hfst_ol::Transducer::get_analyses (this=0x691e60,

input_symbol=0x6ba570, output_symbol=0x6cf26a, 
original_output_tape=0x6bf3a0, i=3485)
at optimized-lookup/transducer.cc:420

269 0x00007ffff7ae85d1 in hfst_ol::Transducer::try_epsilon_transitions (

this=0x691e60, input_symbol=0x6ba570, output_symbol=0x6cf268, 
original_output_tape=0x6bf3a0, i=172105)
at optimized-lookup/transducer.cc:280

270 0x00007ffff7ae811b in hfst_ol::Transducer::get_analyses (this=0x691e60,

...

65493 0x00007ffff7ae85d1 in hfst_ol::Transducer::try_epsilon_transitions (

this=0x691e60, input_symbol=0x6ba570, output_symbol=0x6bf3a0, 
original_output_tape=0x6bf3a0, i=0) at optimized-lookup/transducer.cc:280

65494 0x00007ffff7ae811b in hfst_ol::Transducer::get_analyses (this=0x691e60,

input_symbol=0x6ba570, output_symbol=0x6bf3a0, 
original_output_tape=0x6bf3a0, i=0) at optimized-lookup/transducer.cc:420

65495 0x00007ffff7ae8a72 in hfst_ol::Transducer::lookup_fd (this=0x691e60,

s=0x65ef18 "illu") at optimized-lookup/transducer.cc:259

65496 0x00007ffff7ae8af1 in hfst_ol::Transducer::lookup_fd (this=0x691e60,

s=...) at optimized-lookup/transducer.cc:242

65497 0x00007ffff78d862e in hfst::HfstTransducer::lookup_fd (

this=<optimized out>, s=..., limit=<optimized out>)
at HfstTransducer.cc:392

65498 0x0000000000407b72 in lookup_simple (s=..., t=...,

infinity=0x7fffffffe0bd) at lookup.cc:1116

65499 0x0000000000410c52 in perform_lookups<hfst::hfsttransducer> (</hfst::hfsttransducer>

origin=..., cascade=..., unknown=<optimized out>, infinite=0x7fffffffe0bd)
at lookup.cc:1617

65500 0x000000000040c2f5 in make_lookups () at lookup.cc:1748

65501 0x00000000004053ba in main (argc=2, argv=0x7fffffffe258)

at lookup.cc:1820

I suspect that infinitely_ambiguous detection has a bug or has been disabled for some reason. All in all, the lookup version that is not the super-optimised should probably prefer some slowness over arbitrary segfaults.

Discussion

MongoDB Logo MongoDB