ecpg: fix some minor mishandling of bad input in preprocessor.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 16 Oct 2024 16:24:57 +0000 (12:24 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 16 Oct 2024 16:25:00 +0000 (12:25 -0400)
commit9b4bf5169064044ff082c61bf0783c4a65c08734
tree292ff21a72707003e614596856315f52bd0a2d41
parent79fa7b3b1a449680d9e51624834fbb4b32208659
ecpg: fix some minor mishandling of bad input in preprocessor.

Avoid null-pointer crash when considering a cursor declaration
that's outside any C function (a case which is useless anyway).

Ensure a cursor for a prepared statement is marked as initially
not open.  At worst, if we chanced to get not-already-zeroed memory
from malloc(), this oversight would result in failing to issue a
"cursor "foo" has been declared but not opened" warning that would
have been appropriate.

Avoid running off the end of the buffer when there are mismatched
square brackets following a variable name.  This could lead to
SIGSEGV after reaching the end of memory.

Given the lack of field complaints, none of these seem to be worth
back-patching, but let's clean them up in HEAD.

Per valgrind testing by Alexander Lakhin.

Discussion: https://postgr.es/m/5f5bcecd-d7ec-b8c0-6c92-d1a7c6e0f639@gmail.com
src/interfaces/ecpg/preproc/ecpg.header
src/interfaces/ecpg/preproc/ecpg.trailer
src/interfaces/ecpg/preproc/variable.c