From nobody@FreeBSD.org  Thu Feb 19 16:36:20 2009
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id D7386106564A
	for <freebsd-gnats-submit@FreeBSD.org>; Thu, 19 Feb 2009 16:36:20 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id C520C8FC1E
	for <freebsd-gnats-submit@FreeBSD.org>; Thu, 19 Feb 2009 16:36:20 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.3/8.14.3) with ESMTP id n1JGaK1x090278
	for <freebsd-gnats-submit@FreeBSD.org>; Thu, 19 Feb 2009 16:36:20 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.3/8.14.3/Submit) id n1JGaKUw090269;
	Thu, 19 Feb 2009 16:36:20 GMT
	(envelope-from nobody)
Message-Id: <200902191636.n1JGaKUw090269@www.freebsd.org>
Date: Thu, 19 Feb 2009 16:36:20 GMT
From: Javier Villavicencio <the_paya@gentoo.org>
To: freebsd-gnats-submit@FreeBSD.org
Subject: printf("%zi", (ssize_t) -1) prints 4294967292 (unsigned) value instead of -1
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         131880
>Category:       bin
>Synopsis:       [libc] printf("%zi", (ssize_t) -1) prints 4294967292 (unsigned) value instead of -1
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    das
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Feb 19 16:40:04 UTC 2009
>Closed-Date:    Sat Mar 14 18:47:57 UTC 2009
>Last-Modified:  Sat Mar 14 18:47:57 UTC 2009
>Originator:     Javier Villavicencio
>Release:        7.1-RELEASE
>Organization:
Gentoo
>Environment:
FreeBSD  7.1-RELEASE FreeBSD 7.1-RELEASE #0: Thu Jan  1 14:37:25 UTC 2009     root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  i386
>Description:
Argument for %zi (or %zd) printf format is treated as unsigned while it should be signed.

See also:
http://mail-index.netbsd.org/current-users/2009/02/19/msg008168.html
>How-To-Repeat:
Testcase:

#include <stdio.h>
#include <sys/types.h>

int main(int argc, char **argv)
{
    printf("%zi\n", (ssize_t)-argc);
    return 0;
}

>Fix:
Perhaps http://mail-index.netbsd.org/current-users/2009/02/19/msg008168.html

>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->das 
Responsible-Changed-By: das 
Responsible-Changed-When: Sat Feb 28 04:56:54 UTC 2009 
Responsible-Changed-Why:  
over to me 

http://www.freebsd.org/cgi/query-pr.cgi?pr=131880 
State-Changed-From-To: open->patched 
State-Changed-By: das 
State-Changed-When: Sat Feb 28 04:58:20 UTC 2009 
State-Changed-Why:  
fixed in r189131; awaiting MFC 

http://www.freebsd.org/cgi/query-pr.cgi?pr=131880 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/131880: commit references a PR
Date: Sat, 28 Feb 2009 04:58:32 +0000 (UTC)

 Author: das
 Date: Sat Feb 28 04:58:18 2009
 New Revision: 189131
 URL: http://svn.freebsd.org/changeset/base/189131
 
 Log:
   Make sure %zd treats negative arguments properly on 32-bit platforms.
   Fix harmless but related bugs in %_$zd and %_$tu.
   
   PR:		131880
   MFC after:	1 week
 
 Modified:
   head/lib/libc/stdio/printf-pos.c
   head/lib/libc/stdio/vfprintf.c
   head/lib/libc/stdio/vfwprintf.c
 
 Modified: head/lib/libc/stdio/printf-pos.c
 ==============================================================================
 --- head/lib/libc/stdio/printf-pos.c	Sat Feb 28 02:37:55 2009	(r189130)
 +++ head/lib/libc/stdio/printf-pos.c	Sat Feb 28 04:58:18 2009	(r189131)
 @@ -61,7 +61,7 @@ __FBSDID("$FreeBSD$");
  enum typeid {
  	T_UNUSED, TP_SHORT, T_INT, T_U_INT, TP_INT,
  	T_LONG, T_U_LONG, TP_LONG, T_LLONG, T_U_LLONG, TP_LLONG,
 -	T_PTRDIFFT, TP_PTRDIFFT, T_SIZET, TP_SIZET,
 +	T_PTRDIFFT, TP_PTRDIFFT, T_SSIZET, T_SIZET, TP_SIZET,
  	T_INTMAXT, T_UINTMAXT, TP_INTMAXT, TP_VOID, TP_CHAR, TP_SCHAR,
  	T_DOUBLE, T_LONG_DOUBLE, T_WINT, TP_WCHAR
  };
 @@ -145,7 +145,7 @@ addsarg(struct typetable *types, int fla
  	if (flags & INTMAXT)
  		types->table[types->nextarg++] = T_INTMAXT;
  	else if (flags & SIZET)
 -		types->table[types->nextarg++] = T_SIZET;
 +		types->table[types->nextarg++] = T_SSIZET;
  	else if (flags & PTRDIFFT)
  		types->table[types->nextarg++] = T_PTRDIFFT;
  	else if (flags & LLONGINT)
 @@ -168,7 +168,7 @@ adduarg(struct typetable *types, int fla
  	else if (flags & SIZET)
  		types->table[types->nextarg++] = T_SIZET;
  	else if (flags & PTRDIFFT)
 -		types->table[types->nextarg++] = T_PTRDIFFT;
 +		types->table[types->nextarg++] = T_SIZET;
  	else if (flags & LLONGINT)
  		types->table[types->nextarg++] = T_U_LLONG;
  	else if (flags & LONGINT)
 @@ -716,6 +716,9 @@ build_arg_table(struct typetable *types,
  		    case T_SIZET:
  			(*argtable) [n].sizearg = va_arg (ap, size_t);
  			break;
 +		    case T_SSIZET:
 +			(*argtable) [n].sizearg = va_arg (ap, ssize_t);
 +			break;
  		    case TP_SIZET:
  			(*argtable) [n].psizearg = va_arg (ap, size_t *);
  			break;
 
 Modified: head/lib/libc/stdio/vfprintf.c
 ==============================================================================
 --- head/lib/libc/stdio/vfprintf.c	Sat Feb 28 02:37:55 2009	(r189130)
 +++ head/lib/libc/stdio/vfprintf.c	Sat Feb 28 04:58:18 2009	(r189131)
 @@ -399,7 +399,7 @@ __vfprintf(FILE *fp, const char *fmt0, v
  #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT)
  #define SJARG() \
  	(flags&INTMAXT ? GETARG(intmax_t) : \
 -	    flags&SIZET ? (intmax_t)GETARG(size_t) : \
 +	    flags&SIZET ? (intmax_t)GETARG(ssize_t) : \
  	    flags&PTRDIFFT ? (intmax_t)GETARG(ptrdiff_t) : \
  	    (intmax_t)GETARG(long long))
  #define	UJARG() \
 
 Modified: head/lib/libc/stdio/vfwprintf.c
 ==============================================================================
 --- head/lib/libc/stdio/vfwprintf.c	Sat Feb 28 02:37:55 2009	(r189130)
 +++ head/lib/libc/stdio/vfwprintf.c	Sat Feb 28 04:58:18 2009	(r189131)
 @@ -479,7 +479,7 @@ __vfwprintf(FILE *fp, const wchar_t *fmt
  #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT)
  #define SJARG() \
  	(flags&INTMAXT ? GETARG(intmax_t) : \
 -	    flags&SIZET ? (intmax_t)GETARG(size_t) : \
 +	    flags&SIZET ? (intmax_t)GETARG(ssize_t) : \
  	    flags&PTRDIFFT ? (intmax_t)GETARG(ptrdiff_t) : \
  	    (intmax_t)GETARG(long long))
  #define	UJARG() \
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/131880: commit references a PR
Date: Sat, 14 Mar 2009 18:20:10 +0000 (UTC)

 Author: das
 Date: Sat Mar 14 18:19:50 2009
 New Revision: 189802
 URL: http://svn.freebsd.org/changeset/base/189802
 
 Log:
   Partial MFC of r189131:
     Make sure %zd treats negative arguments properly on 32-bit platforms.
   
     PR:		131880
 
 Modified:
   stable/7/lib/libc/   (props changed)
   stable/7/lib/libc/stdio/vfprintf.c
   stable/7/lib/libc/stdio/vfwprintf.c
 
 Modified: stable/7/lib/libc/stdio/vfprintf.c
 ==============================================================================
 --- stable/7/lib/libc/stdio/vfprintf.c	Sat Mar 14 17:55:16 2009	(r189801)
 +++ stable/7/lib/libc/stdio/vfprintf.c	Sat Mar 14 18:19:50 2009	(r189802)
 @@ -598,7 +598,7 @@ __vfprintf(FILE *fp, const char *fmt0, v
  #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT)
  #define SJARG() \
  	(flags&INTMAXT ? GETARG(intmax_t) : \
 -	    flags&SIZET ? (intmax_t)GETARG(size_t) : \
 +	    flags&SIZET ? (intmax_t)GETARG(ssize_t) : \
  	    flags&PTRDIFFT ? (intmax_t)GETARG(ptrdiff_t) : \
  	    (intmax_t)GETARG(long long))
  #define	UJARG() \
 
 Modified: stable/7/lib/libc/stdio/vfwprintf.c
 ==============================================================================
 --- stable/7/lib/libc/stdio/vfwprintf.c	Sat Mar 14 17:55:16 2009	(r189801)
 +++ stable/7/lib/libc/stdio/vfwprintf.c	Sat Mar 14 18:19:50 2009	(r189802)
 @@ -604,7 +604,7 @@ __vfwprintf(FILE *fp, const wchar_t *fmt
  #define	INTMAX_SIZE	(INTMAXT|SIZET|PTRDIFFT|LLONGINT)
  #define SJARG() \
  	(flags&INTMAXT ? GETARG(intmax_t) : \
 -	    flags&SIZET ? (intmax_t)GETARG(size_t) : \
 +	    flags&SIZET ? (intmax_t)GETARG(ssize_t) : \
  	    flags&PTRDIFFT ? (intmax_t)GETARG(ptrdiff_t) : \
  	    (intmax_t)GETARG(long long))
  #define	UJARG() \
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: patched->closed 
State-Changed-By: das 
State-Changed-When: Sat Mar 14 18:47:23 UTC 2009 
State-Changed-Why:  
patch merged 

http://www.freebsd.org/cgi/query-pr.cgi?pr=131880 
>Unformatted:
