Heikki,

* Heikki Linnakangas (heikki.linnakan...@iki.fi) wrote:
> This patch alleviates that in two ways. First, instead of storing pointers
> in the hash table, store 16-bit indexes into the hist_entries array. That
> slashes the size of the hash table to 1/2 or 1/4 of the original, depending
> on the pointer width. Secondly, adjust the size of the hash table based on
> input size. For very small inputs, you don't need a large hash table to
> avoid collisions.

  The coverity scanner has a bit of an issue with this patch which, at
  least on first blush, looks like a valid concern.
  
  While the change in pg_lzcompress.c:pglz_find_match() to loop on:
  
  while (hent != INVALID_ENTRY_PTR)
  {
          const char *ip = input;
          const char *hp = hent->pos;

  looks good, and INVALID_ENTRY_PTR is the address of the first entry in
  the array (and can't be NULL), towards the end of the loop we do:

  hent = hent->next;
  if (hent)
          ...

  Should we really be checking for 'hent != INVALID_ENTRY_PTR' here?  If
  not, and hent really can end up as NULL, then we're going to segfault
  on the next loop due to the unchecked 'hent->pos' early in the loop.
  If hent can never be NULL, then we probably don't need this check at
  all.

        Thanks,

                Stephen

Attachment: signature.asc
Description: Digital signature

Reply via email to