On 09/26/2016 09:20 AM, Florian Weimer wrote:
* Jeff Law:

On 09/25/2016 03:46 AM, Bernd Edlinger wrote:
Hi Martin,

in the past I have seen (and fixed) code like

sprintf(buf, "%s %d", buf, x);

that may possibly work by chance, but usually
produces undefined results.

Do you see a way to enhance the warning for cases
where the output buffer overlaps an input buffer?

ISTM you really need strong PTA analysis here to nail down the
pointers to a single object, then you can query their ranges and look
for overlap.

We could detect this at run time in glibc with reasonable cost, I
think.  We should probably introduce new symbol versions if we do
that, to avoid breaking existing applications needlessly.
Probably not a bad idea. memstomp doesn't catch it for sprintf & friends -- it was deemed too painful to detect :-)



Or we could make this well-defined because it is such a useful
extension.
That just encourages developers to write non-portable code. I'd rather see this kind of thing halt the program in its tracks before wandering into the realm of undefined or implementation defined behavior.

jeff

Reply via email to