Re: Fix overflow of nbatch
От | Tomas Vondra |
---|---|
Тема | Re: Fix overflow of nbatch |
Дата | |
Msg-id | 74451c8c-e6ae-4332-b923-620a9f91023a@vondra.me обсуждение исходный текст |
Ответ на | Re: Fix overflow of nbatch (David Rowley <dgrowleyml@gmail.com>) |
Ответы |
Re: Fix overflow of nbatch
|
Список | pgsql-hackers |
On 9/22/25 22:45, David Rowley wrote: > 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); > Yeah, I failed to notice this part of the formula can overflow. > 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. > It seems cleaner to add a the cast to the formula, if only because of the assignment to numbatches. thanks -- Tomas Vondra
В списке pgsql-hackers по дате отправления: