postgresql/src
Tom Lane 299d171652 Install defenses against overflow in BuildTupleHashTable().
The planner can sometimes compute very large values for numGroups, and in
cases where we have no alternative to building a hashtable, such a value
will get fed directly to BuildTupleHashTable as its nbuckets parameter.
There were two ways in which that could go bad.  First, BuildTupleHashTable
declared the parameter as "int" but most callers were passing "long"s,
so on 64-bit machines undetected overflow could occur leading to a bogus
negative value.  The obvious fix for that is to change the parameter to
"long", which is what I've done in HEAD.  In the back branches that seems a
bit risky, though, since third-party code might be calling this function.
So for them, just put in a kluge to treat negative inputs as INT_MAX.
Second, hash_create can go nuts with extremely large requested table sizes
(notably, my_log2 becomes an infinite loop for inputs larger than
LONG_MAX/2).  What seems most appropriate to avoid that is to bound the
initial table size request to work_mem.

This fixes bug #6035 reported by Daniel Schreiber.  Although the reported
case only occurs back to 8.4 since it involves WITH RECURSIVE, I think
it's a good idea to install the defenses in all supported branches.
2011-05-23 12:52:46 -04:00
..
backend Install defenses against overflow in BuildTupleHashTable(). 2011-05-23 12:52:46 -04:00
bin Message style improvements 2011-05-22 20:04:07 +03:00
include Install defenses against overflow in BuildTupleHashTable(). 2011-05-23 12:52:46 -04:00
interfaces Fix untranslatable assembly of libpq connection failure message 2011-05-19 22:56:53 +03:00
makefiles Rewrite installation makefile rules without for loops 2011-05-02 01:05:08 +03:00
pl Make plpgsql provide the typmods for its variables to the main parser. 2011-05-22 15:15:07 -04:00
port Assorted minor changes to silence Windows compiler warnings. 2011-04-25 12:56:53 -04:00
template Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
test Use the right pgsql for isolation tests. 2011-05-22 17:58:26 -04:00
timezone Split PGC_S_DEFAULT into two values, for true boot_val vs computed default. 2011-05-11 19:57:38 -04:00
tools Remove spurious underscore in name of isolation tester on MSVC. 2011-05-22 21:51:18 -04:00
tutorial Stamp copyrights for year 2011. 2011-01-01 13:18:15 -05:00
.gitignore Convert cvsignore to gitignore, and add .gitignore for build targets. 2010-09-22 12:57:04 +02:00
bcc32.mak Remove useless whitespace at end of lines 2010-11-23 22:34:55 +02:00
DEVELOPERS Replace a couple of references to files that no longer exist in the source 2009-05-04 08:08:47 +00:00
Makefile Fix some oversights in distprep and maintainer-clean targets. 2011-03-10 00:04:05 -05:00
Makefile.global.in Rename pg_regress option --multibyte to --encoding 2011-04-15 08:42:05 +03:00
Makefile.shlib Remove useless whitespace at end of lines 2010-11-23 22:34:55 +02:00
nls-global.mk Fix makefile logic to not break the build when xgettext is missing 2010-10-14 23:16:46 +03:00
win32.mak Remove useless whitespace at end of lines 2010-11-23 22:34:55 +02:00