On Fri, 2024-06-14 at 09:55 +0200, Daniel Gustafsson wrote:
> > On 14 Jun 2024, at 09:38, Winter Loo <winter...@126.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


Reply via email to