[PATCH] Implement strlcat [BZ#178]
Paul Eggert
eggert@cs.ucla.edu
Fri Dec 11 18:41:00 GMT 2015
On 12/11/2015 04:09 AM, Florian Weimer wrote:
> This implementation comes with documentation and it says
My comments were about the OpenBSD implementation, not the
documentation. If implementation compatibility is required (which I
think was Zack's point), we need to fix incompatibilities with the
OpenBSD implementation, even if these incompatibilities aren't documented.
Conversely, if implementation compatibility is not required, then we
needn't reproduce OpenBSD's behavior exactly on weird corner cases that
come up only with buggy applications. NetBSD does this to some extent,
and if we're going to implement strlcpy+strlcat at all, we could do so
as well. So, for example, it would be fine if _FORTIFY_SOURCE caused
strlcpy to report an error when given overlapping arguments, even though
OpenBSD's strlcpy implementation has well-defined behavior in that
situation.
Either approach would be better than a randomish glibc implementation,
partially compatible with OpenBSD's weird quirks and partially not, with
no principle for when we're compatible and when not.
> “If the src and dst strings overlap, the behavior is undefined.”
>
> <http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/lib/libc/string/strlcpy.3>
If the goal is to implement this spec (and implementation compatibility
is not required), then this quote says the destination is a string,
which means the destination buffer is null-terminated for strlcat, and
also means SIZE is nonzero for both strlcpy and strlcat. And that is
what my proposed strlcpy+strlcat doc patch says, albeit more clearly. Of
course other parts of the OpenBSD spec talk about what to do when SIZE
is zero or the strlcat destination is not a string, but what can I say?
The OpenBSD spec is confused and contradicts itself, and this gives us
wiggle room to interpret it reasonably for these weird corner cases.
Thanks, by the way, for being so patient with all this. This API is such
a pain.
More information about the Libc-alpha
mailing list