Re: [HACKERS] 【ECPG】strncpy functiondoes not set the end character '\0'
От | Michael Meskes |
---|---|
Тема | Re: [HACKERS] 【ECPG】strncpy functiondoes not set the end character '\0' |
Дата | |
Msg-id | 1504794406.3276.2.camel@postgresql.org обсуждение исходный текст |
Ответ на | Re: [HACKERS] 【ECPG】strncpy function does not set the end character '\0' (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: [HACKERS] 【ECPG】strncpy function does not set the end character '\0'
|
Список | pgsql-hackers |
> > Why do you think there should be one? My memory might be wrong but > > I > > don't think it's supposed to be a null terminated string. > > That field is defined as char[5] in struct sqlca_t, so the intent is > clearly that it not be null terminated. However, it looks to me like > there'd be at least one alignment-padding byte after it, and that > byte > is likely to be 0 in a lot of situations (particularly for statically > allocated sqlca_t's). So a lot of the time, you could get away with > using strcmp() or other functions that expect null termination. With "supposed" I was referring to the standard that defines SQLCA. > I'm thinking therefore that there's probably code out there that > tries > to do strcmp(sqlca->sqlstate, "22000") or suchlike, and it works > often > enough that the authors haven't identified their bug. The question > is > do we want to try to make that be valid code. > > Changing the field declaration to char[5+1] would be easy enough, but > I have no idea how many places in ecpglib would need to change to > make > sure that the last byte gets set to 0. I doubt it'll be a lot. However, it would make us differ, albeit very slightly, from what others do. I haven't come up with a practical problem coming from that difference though. Michael -- Michael Meskes Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org) Meskes at (Debian|Postgresql) dot Org Jabber: michael at xmpp dot meskes dot org VfL Borussia! Força Barça! SF 49ers! Use Debian GNU/Linux, PostgreSQL
В списке pgsql-hackers по дате отправления: