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
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 |