From: | David Rowley <dgrowleyml(at)gmail(dot)com> |
---|---|
To: | Jelte Fennema-Nio <postgres(at)jeltef(dot)nl> |
Cc: | Andres Freund <andres(at)anarazel(dot)de>, Melih Mutlu <m(dot)melihmutlu(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Heikki Linnakangas <hlinnaka(at)iki(dot)fi>, Robert Haas <robertmhaas(at)gmail(dot)com>, Thomas Munro <thomas(dot)munro(at)gmail(dot)com>, Ranier Vilela <ranier(dot)vf(at)gmail(dot)com> |
Subject: | Re: Flushing large data immediately in pqcomm |
Date: | 2024-04-07 12:40:52 |
Message-ID: | CAApHDvrBJeqj0e+4YcudraB9inQDL-ODFvz13Oe40AcET=vbig@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Sun, 7 Apr 2024 at 22:05, Jelte Fennema-Nio <postgres(at)jeltef(dot)nl> wrote:
>
> On Sun, 7 Apr 2024 at 03:39, Andres Freund <andres(at)anarazel(dot)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.
Looking at the code in socket_putmessage_noblock(), I don't understand
why it's ok for PqSendBufferSize to be int but "required" must be
size_t. There's a line that does "PqSendBufferSize = required;". It
kinda looks like they both should be size_t. Am I missing something
that you've thought about?
David
From | Date | Subject | |
---|---|---|---|
Next Message | Ranier Vilela | 2024-04-07 12:42:54 | Re: Flushing large data immediately in pqcomm |
Previous Message | David Rowley | 2024-04-07 12:37:53 | Re: Add bump memory context type and use it for tuplesorts |