Re: may be a buffer overflow problem

From: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>
To: Daniel Gustafsson <daniel(at)yesql(dot)se>, Winter Loo <winterloo(at)126(dot)com>
Cc: pgsql-hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: may be a buffer overflow problem
Date: 2024-06-14 08:06:58
Message-ID: e8dc6ede8f30129f2fa90a9d7d936f50a78057f0.camel@cybertec.at
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Fri, 2024-06-14 at 09:55 +0200, Daniel Gustafsson wrote:
> > On 14 Jun 2024, at 09:38, Winter Loo <winterloo(at)126(dot)com> wrote:
>
> > I find the definition of `sqlca->sqlstate` and it has only 5 bytes. When the statement
> >
> > ```c
> > strncpy(sqlca->sqlstate, "YE001", sizeof(sqlca->sqlstate));
> > ```
> >
> > get executed, `sqlca->sqlstate` will have no '\0' byte which makes me anxious when someone prints that as a string.
>
> sqlstate is defined as not being unterminated fixed-length, leaving the callers
> to handle termination.
>
> > Indeed, I found the code(in src/interfaces/ecpg/ecpglib/misc.c) does that,
> >
> > fprintf(debugstream, "[NO_PID]: sqlca: code: %ld, state: %s\n",
> > sqlca->sqlcode, sqlca->sqlstate);
>
> This is indeed buggy and need to take the length into account, as per the
> attached. This only happens when in the undocumented regression test debug
> mode which may be why it's gone unnoticed.

So you think we should ignore that compiler warning?
What about using memcpy() instead of strncpy()?

Yours,
Laurenz Albe

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Daniel Gustafsson 2024-06-14 08:10:42 Re: may be a buffer overflow problem
Previous Message Laurenz Albe 2024-06-14 08:04:45 Re: may be a buffer overflow problem