Запись 8 байт в переменную на 4 байта
От: Аноним  
Дата: 18.08.09 09:38
Оценка:
Есть функция:


BOOLEAN HashAdd(
  __in ULONG value,
  __in ULONG data,
  __inout ULONG *table,
  __out_opt ULONG *dataTable,
  __in ULONG tableSize)
{
  ULONG i = value % tableSize;
  BOOLEAN cycle = FALSE;
  
  while (table[i] > 0)
  {
    i++;
    
    if (i == tableSize)
    {
      if (cycle)
      {
        return FALSE;
      }
      else
      {
        i = 0;
        cycle = TRUE;
      }
    }
  }
  
  table[i] = value;
  
  if (dataTable) dataTable[i] = data;
  
  return TRUE;
}


http://www.microsoft.com/whdc/devtools/tools/prefast.mspx на строчке

if (dataTable) dataTable[i] = data;


выдает сообщение

(PFD)Buffer overrun while writing to 'dataTable': the writable size is '1*4' bytes, but '8' bytes may be written.


Код 32-битный, как могут быть записаны 8 байт я понять не могу.
Может глюк PreFast?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.