I wrote: > Seeing that this code is exercised thousands of times a day in the > regression tests and has had a failure rate of exactly zero (and > yes, the tests do check the output), there must be some reason > why it's okay.
After looking a little closer, I think the reason why it works in practice is that there's always a few bytes of zero padding at the end of struct sqlca_t. I don't see any value in changing individual code sites that are depending on that, because there are surely many more, both in our own code and end users' code. What I suggest we ought to do is formalize the existence of that zero pad. Perhaps like this: char sqlstate[5]; + char sqlstatepad; /* nul terminator for sqlstate */ }; Another way could be to change - char sqlstate[5]; + char sqlstate[6]; but I fear that could have unforeseen consequences in code that is paying attention to sizeof(sqlstate). Either way there are probably doc adjustments to be made. regards, tom lane