--- /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;
     }
