]> granicus.if.org Git - postgresql/commit
Fix hash_search to avoid corruption of the hash table on out-of-memory.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 19 Oct 2012 19:24:27 +0000 (15:24 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 19 Oct 2012 19:24:27 +0000 (15:24 -0400)
commitf20d91866ec21660998c561a7bc2a08e8a30c1cc
tree5c5eeae0e8f30ee2a3330723dd74ac176c2f1c99
parent44ee57a6f28ded67a47b55686efc353e1c9e21d9
Fix hash_search to avoid corruption of the hash table on out-of-memory.

An out-of-memory error during expand_table() on a palloc-based hash table
would leave a partially-initialized entry in the table.  This would not be
harmful for transient hash tables, since they'd get thrown away anyway at
transaction abort.  But for long-lived hash tables, such as the relcache
hash, this would effectively corrupt the table, leading to crash or other
misbehavior later.

To fix, rearrange the order of operations so that table enlargement is
attempted before we insert a new entry, rather than after adding it
to the hash table.

Problem discovered by Hitoshi Harada, though this is a bit different
from his proposed patch.
src/backend/utils/hash/dynahash.c