Boost logo

Boost :

From: Benzinger, Ralph (ralph.benzinger_at_[hidden])
Date: 2004-08-24 11:50:41


Hello,

The regex library contains an alignment bug that leads to bus errors on 64 bit platforms (in particular, Sun and HP). To reproduce, compile regular expression '(?>a+b|a+)bc+' with flags regex_constants::normal. This should raise SIGBUS in perl_matcher<>::push_alt().

As a fix, I suggest forcing alignment of structure saved_state in perl_matcher_common.cpp:

   struct saved_state
   {
< unsigned int id;
< saved_state(unsigned i) : id(i) {}
-> union align
-> {
-> unsigned int id;
-> void* dummy;
-> align(unsigned i) : id(i) {}
-> } id_aligned;
-> saved_state(unsigned i) : id_aligned(i) {}
   };

and further down below:

< unwinder = s_unwind_table[m_backup_state->id];
-> unwinder = s_unwind_table[m_backup_state->id_aligned.id];

The other saved_* structures that get pushed onto the stack seem fine for now.

Regards,
Ralph


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk