On 02/15/16 13:32, Conrad Meyer wrote:
On Mon, Feb 15, 2016 at 10:13 AM, Pedro F. Giffuni <p...@freebsd.org> wrote:
Author: pfg
Date: Mon Feb 15 18:13:33 2016
New Revision: 295631
URL: https://svnweb.freebsd.org/changeset/base/295631
...
   Note that this implementation convention cannot be adhered to for strings
   longer than {INT_MAX} bytes as the value would not be representable in the
   return type of the function. For backwards-compatibility, implementations
   can return the number of bytes for strings of up to {INT_MAX} bytes, and
   return {INT_MAX} for all longer strings.
...
--- head/lib/libc/stdio/fputs.c Mon Feb 15 17:14:10 2016        (r295630)
+++ head/lib/libc/stdio/fputs.c Mon Feb 15 18:13:33 2016        (r295631)
...
@@ -62,5 +63,7 @@ fputs(const char * __restrict s, FILE *
         ORIENT(fp, -1);
         retval = __sfvwrite(fp, &uio);
         FUNLOCKFILE(fp);
+       if (retval == 0)
+               return (iov.iov_len > INT_MAX ? INT_MAX : uio.uio_resid);

                  ^^^^^^^^^^^ why not uio.uio_resid here as well?


Because uio.ui_resid is an int and it's likely to overflow before it keeps a useful value for that comparison, Of course, as Bruce noted,
__sfwrite modifies uio so uio.uio_resid doesn't belong there at all.

Hmm... we need some fputs() tests in the testsuite.

Pedro.
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to