Обсуждение: Fix possible dereference null pointer (PQprint)
Hi.
In the function *PQprint*, the variable po->fieldName
can be NULL.
See the checks a few lines up.
for (numFieldName = 0;
po->fieldName && po->fieldName[numFieldName];
numFieldName++)
po->fieldName && po->fieldName[numFieldName];
numFieldName++)
So, I think that must be checked, when used,
in the loop below.
best regards,
Ranier Vilela
Вложения
> On 27 May 2024, at 16:52, Ranier Vilela <ranier.vf@gmail.com> wrote: > In the function *PQprint*, the variable po->fieldName can be NULL. Yes. > See the checks a few lines up. Indeed, let's check it. for (numFieldName = 0; po->fieldName && po->fieldName[numFieldName]; numFieldName++) ; for (j = 0; j < nFields; j++) { int len; const char *s = (j < numFieldName && po->fieldName[j][0]) ? po->fieldName[j] : PQfname(res, j); If po->fieldName is NULL then numFieldName won't be incremented and will remain zero. In the check you reference we check (j < numFieldName) which will check the j in the range 0..nFields for being less than zero. The code thus does seem quite correct to me. -- Daniel Gustafsson
Em sex., 31 de mai. de 2024 às 05:03, Daniel Gustafsson <daniel@yesql.se> escreveu:
> On 27 May 2024, at 16:52, Ranier Vilela <ranier.vf@gmail.com> wrote:
> In the function *PQprint*, the variable po->fieldName can be NULL.
Yes.
> See the checks a few lines up.
Indeed, let's check it.
for (numFieldName = 0;
po->fieldName && po->fieldName[numFieldName];
numFieldName++)
;
for (j = 0; j < nFields; j++)
{
int len;
const char *s = (j < numFieldName && po->fieldName[j][0]) ?
po->fieldName[j] : PQfname(res, j);
If po->fieldName is NULL then numFieldName won't be incremented and will remain
zero. In the check you reference we check (j < numFieldName) which will check
the j in the range 0..nFields for being less than zero. The code thus does
seem quite correct to me.
You are completely correct. My bad.
Thank you Daniel.
best regards,
Ranier Vilela