From nobody@FreeBSD.org  Mon Dec 17 16:32:08 2012
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52])
	by hub.freebsd.org (Postfix) with ESMTP id 7F81CA47
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 17 Dec 2012 16:32:08 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22])
	by mx1.freebsd.org (Postfix) with ESMTP id 6461C8FC12
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 17 Dec 2012 16:32:08 +0000 (UTC)
Received: from red.freebsd.org (localhost [127.0.0.1])
	by red.freebsd.org (8.14.5/8.14.5) with ESMTP id qBHGW7rD041077
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 17 Dec 2012 16:32:07 GMT
	(envelope-from nobody@red.freebsd.org)
Received: (from nobody@localhost)
	by red.freebsd.org (8.14.5/8.14.5/Submit) id qBHGW7ij041062;
	Mon, 17 Dec 2012 16:32:07 GMT
	(envelope-from nobody)
Message-Id: <201212171632.qBHGW7ij041062@red.freebsd.org>
Date: Mon, 17 Dec 2012 16:32:07 GMT
From: Daniel Shahaf <danielsh@elego.de>
To: freebsd-gnats-submit@FreeBSD.org
Subject: printf(1) doesn't treat extra conversion specifiers as zero (posix)
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         174521
>Category:       bin
>Synopsis:       [patch] printf(1) doesn't treat extra conversion specifiers as zero (posix)
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    eadler
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Dec 17 16:40:00 UTC 2012
>Closed-Date:    Sun Feb 03 01:22:27 UTC 2013
>Last-Modified:  Sun Feb  3 01:30:00 UTC 2013
>Originator:     Daniel Shahaf
>Release:        9.0-RELEASE
>Organization:
elego Software Solutions GmbH
>Environment:
FreeBSD loki.apache.org 9.0-RELEASE FreeBSD 9.0-RELEASE #0 r231596: Sun Feb 19 02:42:36 UTC 2012     root@loki.apache.org:/usr/obj/usr/src/sys/GENERIC  amd64

>Description:
/usr/bin/printf %u%u 15

Actual output: "1515"

Expected output: "150"



POSIX specifies that extra format specifiers shall be treated as zero:

http://mid.gmane.org/201212171135.14216.Arfrever.FTA@gmail.com

dash,bash,zsh, as well as Solaris and Linux, print "150".  But printf(1) on FreeBSD prints "1515".

Reproduced by eadler@ on -CURRENT.
>How-To-Repeat:
/usr/bin/printf %u%u 15
(should output 150)
>Fix:


>Release-Note:
>Audit-Trail:

From: Mark Johnston <markjdb@gmail.com>
To: bug-followup@FreeBSD.org, danielsh@elego.de
Cc:  
Subject: Re: bin/174521: printf(1) doesn&#39;t treat extra conversion
 specifiers as zero (posix)
Date: Mon, 17 Dec 2012 23:12:50 -0500

 --2oS5YaxWCcQjTEyO
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 The fix for this is pretty easy - a patch is attached.
 
 -Mark
 
 --2oS5YaxWCcQjTEyO
 Content-Type: text/x-diff; charset=us-ascii
 Content-Disposition: attachment; filename="printf_no_specifier.patch"
 
 diff --git a/usr.bin/printf/printf.c b/usr.bin/printf/printf.c
 index 4b09342..2368f18 100644
 --- a/usr.bin/printf/printf.c
 +++ b/usr.bin/printf/printf.c
 @@ -473,7 +473,7 @@ getnum(intmax_t *ip, uintmax_t *uip, int signedconv)
  	int rval;
  
  	if (!*gargv) {
 -		*ip = 0;
 +		*ip = *uip = 0;
  		return (0);
  	}
  	if (**gargv == '"' || **gargv == '\'') {
 
 --2oS5YaxWCcQjTEyO--

From: Daniel Shahaf <danielsh@elego.de>
To: Mark Johnston <markjdb@gmail.com>
Cc: bug-followup@FreeBSD.org
Subject: Re: bin/174521: printf(1) doesn&#39;t treat extra conversion
	specifiers as zero (posix)
Date: Tue, 18 Dec 2012 18:27:49 +0200

 Mark Johnston wrote on Mon, Dec 17, 2012 at 23:12:50 -0500:
 > The fix for this is pretty easy - a patch is attached.
 
 Confirmed (against an old 9.0 tree -- that's what I had handy).
 
 FWIW, FreeBSD 8.2 is not affected:
 
 % printf %u%u 15; echo 
 150
 % uname -r
 8.2-RELEASE
 
 Thanks,
 
 Daniel
Responsible-Changed-From-To: freebsd-bugs->eadler 
Responsible-Changed-By: eadler 
Responsible-Changed-When: Tue Dec 18 16:44:47 UTC 2012 
Responsible-Changed-Why:  
I'll take it. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=174521 
State-Changed-From-To: open->analyzed 
State-Changed-By: eadler 
State-Changed-When: Tue Dec 18 17:40:19 UTC 2012 
State-Changed-Why:  
awaiting approval or review prior to commit (no action needed from 
submitter) 

http://www.freebsd.org/cgi/query-pr.cgi?pr=174521 
State-Changed-From-To: analyzed->patched 
State-Changed-By: eadler 
State-Changed-When: Tue Dec 18 21:03:46 UTC 2012 
State-Changed-Why:  
fixed in r244407 with a regression test 

http://www.freebsd.org/cgi/query-pr.cgi?pr=174521 
State-Changed-From-To: patched->closed 
State-Changed-By: eadler 
State-Changed-When: Sun Feb 3 01:22:26 UTC 2013 
State-Changed-Why:  
Committed. Thanks! 

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

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/174521: commit references a PR
Date: Sun,  3 Feb 2013 01:22:44 +0000 (UTC)

 Author: eadler
 Date: Sun Feb  3 01:22:28 2013
 New Revision: 246277
 URL: http://svnweb.freebsd.org/changeset/base/246277
 
 Log:
   MFC r244407,r244409:
   	POSIX requires that non-existent or null arguments be treated as if a
   	zero argument were supplied.
   
   	Add regression tests to catch this case as well.
   
   PR:		bin/174521
   Approved by:	cperciva (mentor, implicit)
 
 Added:
   stable/9/tools/regression/usr.bin/printf/regress.zero.out
      - copied unchanged from r244407, head/tools/regression/usr.bin/printf/regress.zero.out
 Modified:
   stable/9/tools/regression/usr.bin/printf/regress.sh
   stable/9/usr.bin/printf/printf.c
 Directory Properties:
   stable/9/tools/regression/   (props changed)
   stable/9/usr.bin/printf/   (props changed)
 
 Modified: stable/9/tools/regression/usr.bin/printf/regress.sh
 ==============================================================================
 --- stable/9/tools/regression/usr.bin/printf/regress.sh	Sun Feb  3 01:08:01 2013	(r246276)
 +++ stable/9/tools/regression/usr.bin/printf/regress.sh	Sun Feb  3 01:22:28 2013	(r246277)
 @@ -2,7 +2,7 @@
  
  REGRESSION_START($1)
  
 -echo '1..11'
 +echo '1..12'
  
  REGRESSION_TEST(`b', `printf "abc%b%b" "def\n" "\cghi"')
  REGRESSION_TEST(`d', `printf "%d,%5d,%.5d,%0*d,%.*d\n" 123 123 123 5 123 5 123')
 @@ -15,5 +15,9 @@ REGRESSION_TEST(`m3', `printf "%%%s\n" a
  REGRESSION_TEST(`m4', `printf "%d,%f,%c,%s\n"')
  REGRESSION_TEST(`m5', `printf -- "-d\n"')
  REGRESSION_TEST(`s', `printf "%.3s,%-5s\n" abcd abc')
 +REGRESSION_TEST('zero', `printf "%u%u\n" 15')
 +REGRESSION_TEST('zero', `printf "%d%d\n" 15')
 +REGRESSION_TEST('zero', `printf "%d%u\n" 15')
 +REGRESSION_TEST('zero', `printf "%u%d\n" 15')
  
  REGRESSION_END()
 
 Copied: stable/9/tools/regression/usr.bin/printf/regress.zero.out (from r244407, head/tools/regression/usr.bin/printf/regress.zero.out)
 ==============================================================================
 --- /dev/null	00:00:00 1970	(empty, because file is newly added)
 +++ stable/9/tools/regression/usr.bin/printf/regress.zero.out	Sun Feb  3 01:22:28 2013	(r246277, copy of r244407, head/tools/regression/usr.bin/printf/regress.zero.out)
 @@ -0,0 +1 @@
 +150
 
 Modified: stable/9/usr.bin/printf/printf.c
 ==============================================================================
 --- stable/9/usr.bin/printf/printf.c	Sun Feb  3 01:08:01 2013	(r246276)
 +++ stable/9/usr.bin/printf/printf.c	Sun Feb  3 01:22:28 2013	(r246277)
 @@ -467,7 +467,7 @@ getnum(intmax_t *ip, uintmax_t *uip, int
  	int rval;
  
  	if (!*gargv) {
 -		*ip = 0;
 +		*ip = *uip = 0;
  		return (0);
  	}
  	if (**gargv == '"' || **gargv == '\'') {
 _______________________________________________
 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"
 
>Unformatted:
