Re: Fix overflow of nbatch
От | David Rowley |
---|---|
Тема | Re: Fix overflow of nbatch |
Дата | |
Msg-id | CAApHDvq-yVY42m6_KwZEhAG5LA9pAQJMEuS8J94e_=5uXfVNMQ@mail.gmail.com обсуждение исходный текст |
Ответ на | Fix overflow of nbatch (Vaibhav Jain <jainva@google.com>) |
Ответы |
Re: Fix overflow of nbatch
|
Список | pgsql-hackers |
On Tue, 23 Sept 2025 at 01:57, Vaibhav Jain <jainva@google.com> wrote: > With a1b4f28, to compute current_space, nbatch is being multiplied > by BLCKSZ. nbatch is int and when multiplied with BLCKSZ, it can > easily overflow the int limit.To keep the calculation safe for > current_space, convert nbatch to size_t. Thanks for finding and reporting this. I think a1b4f289b mistakenly thought that there'd be size_t arithmetic in the following two lines because the final result is a size_t: size_t current_space = hash_table_bytes + (2 * nbatch * BLCKSZ); size_t new_space = hash_table_bytes * 2 + (nbatch * BLCKSZ); I'd rather see this fixed by adding a cast, i.e.: "(size_t) nbatch" on the above two lines. All that code is new in a1b4f289b, and if you change the nbatch to a size_t it affects the code that existed before a1b4f289b, and from looking over that code, it seems to ensure that nbatch does not overflow int by doing "dbatch = Min(dbatch, max_pointers);", where max_pointers is constrained by MaxAllocSize / sizeof(HashJoinTuple). Also, making nbatches size_t makes the final line of " *numbatches = nbatch;" somewhat questionable since numbatches is an int pointer. David
В списке pgsql-hackers по дате отправления: