--- /k/word_helper.h 2004-05-09 21:53:27.000000000 +0200 +++ ./word_helper.h 2006-06-09 15:48:02.000000000 +0200 @@ -552,8 +552,20 @@ namespace wvWare const U8 tmp = m_fkp.m_rgb[ m_index ].offset; // Now we have to calculate the real offset and then locate it // within our cached array... - if ( tmp != 0 ) - return &m_fkp.m_fkp[ tmp * 2 - m_fkp.m_internalOffset ]; + if ( tmp != 0 ) { + const int pos = tmp * 2 - m_fkp.m_internalOffset; + if ( pos < 0 ) { + wvlog << "ERROR: FKP internalOffset (" << m_fkp.m_internalOffset << ") is bigger than " << + "2*" << (int)tmp << ", FKP array index would be negative!" << std::endl; + return 0; + } else if ( pos >= 511 - m_fkp.m_internalOffset ) { + wvlog << "ERROR: FKP array index (" << pos << " is bigger than allocated size (" + << 511 - m_fkp.m_internalOffset << ")" << std::endl; + return 0; + } else { + return &m_fkp.m_fkp[ pos ]; + } + } } return 0; }