Re: Flushing large data immediately in pqcomm
Jelte Fennema-Nio <postgres@jeltef.nl>
From: Jelte Fennema-Nio <postgres@jeltef.nl>
To: Andres Freund <andres@anarazel.de>
Cc: David Rowley <dgrowleyml@gmail.com>, Melih Mutlu <m.melihmutlu@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>,
Heikki Linnakangas <hlinnaka@iki.fi>, Robert Haas <robertmhaas@gmail.com>, Thomas Munro <thomas.munro@gmail.com>, Ranier Vilela <ranier.vf@gmail.com>
Date: 2024-04-07T10:04:48Z
Lists: pgsql-hackers
Attachments
- v7-0001-Avoid-possible-overflow-in-socket_putmessage_nonb.patch (application/octet-stream) patch v7-0001
On Sun, 7 Apr 2024 at 03:39, Andres Freund <andres@anarazel.de> wrote: > Changing the global vars to size_t seems mildly bogus to me. All it's > achieving is to use slightly more memory. It also just seems unrelated to the > change. I took a closer look at this. I agree that changing PqSendBufferSize to size_t is unnecessary: given the locations that it is used I see no risk of overflow anywhere. Changing the type of PqSendPointer and PqSendStart is needed though, because (as described by Heiki and David upthread) the argument type of internal_flush_buffer is size_t*. So if you actually pass int* there, and the sizes are not the same then you will start writing out of bounds. And because internal_flush_buffer is introduced in this patch, it is related to this change. This is what David just committed too. However, the "required" var actually should be of size_t to avoid overflow if len is larger than int even without this change. So attached is a tiny patch that does that.
Commits
-
Avoid needless large memcpys in libpq socket writing
- c4ab7da60617 17.0 landed