Re: Retrieving query results
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Michael Paquier <michael.paquier@gmail.com>
Cc: Igor Korot <ikorot01@gmail.com>,
pgsql-general <pgsql-general@postgresql.org>
Date: 2017-08-24T23:10:04Z
Lists: pgsql-general
Michael Paquier <michael.paquier@gmail.com> writes: > On Thu, Aug 24, 2017 at 11:56 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote: >> I haven't tried it, but it sure looks like it would, if you don't hit >> OOM first. pqAddTuple() isn't doing anything to guard against integer >> overflow. The lack of reports implies that no one has ever tried to >> retrieve even 1G rows, let alone more ... > Yeah, looking at the code we would just need to check if ntups gets > negative (well, equal to INT_MIN) after being incremented. I think the real problem occurs where we realloc the array bigger. tupArrSize needs to be kept to no more than INT_MAX --- and, ideally, it should reach that value rather than dying on the iteration after it reaches 2^30 (so that we support resultsets as large as we possibly can). Without a range-check, it's not very clear what realloc will think it's being asked for. Also, on 32-bit machines, we could overflow size_t before tupArrSize even gets that big, so a test against SIZE_MAX/sizeof(pointer) may be needed as well. As long as we constrain tupArrSize to be within bounds, we don't have to worry about overflow of ntups per se. regards, tom lane
Commits
-
Doc: document libpq's restriction to INT_MAX rows in a PGresult.
- 2a82170a56cb 9.2.24 landed
- 1e6c36260635 9.3.20 landed
- 2338ad26374e 9.4.15 landed
- c7e990bb0f4d 9.5.10 landed
- 941e47fc43cc 9.6.6 landed
- ff59f30dc30e 10.0 landed
- 6cbee65eee20 11.0 landed
-
Teach libpq to detect integer overflow in the row count of a PGresult.
- dfd1042c6ae5 9.5.10 landed
- d391fb6c3802 9.3.20 landed
- bc95e5874ac9 9.6.6 landed
- b481b39b876f 10.0 landed
- a07058a6d43b 9.2.24 landed
- 2e70d6b5e99b 11.0 landed
- 1c53722ffd00 9.4.15 landed