Module Name: src Committed By: kre Date: Mon Sep 10 14:42:29 UTC 2018
Modified Files: src/usr.bin/printf: printf.c Log Message: A truly ancient bug found by Edgar Fuss When printf is running builtin in a sh, global vars aren't reset to 0 between invocations. This affects "rval" which remembers state from a previous %b \c and thereafter always exits after the first format conversion, until we get a conversion that generates an error (which resets the flag almost by accident) printf %b abc\\c abc (no \n) printf %s%s hello world hello (no \n, of course, no world ...) printf %s%s hello world hello printf %s%s hello world hello printf %d hello printf: hello: expected numeric value 0 (no \n) printf %s%s hello world helloworld (no \n, and we are back!) This affects both /bin/sh and /bin/csh (and has for a very long time). XXX pullup -8 To generate a diff of this commit: cvs rdiff -u -r1.45 -r1.46 src/usr.bin/printf/printf.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/printf/printf.c diff -u src/usr.bin/printf/printf.c:1.45 src/usr.bin/printf/printf.c:1.46 --- src/usr.bin/printf/printf.c:1.45 Tue Sep 4 01:13:50 2018 +++ src/usr.bin/printf/printf.c Mon Sep 10 14:42:29 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: printf.c,v 1.45 2018/09/04 01:13:50 kre Exp $ */ +/* $NetBSD: printf.c,v 1.46 2018/09/10 14:42:29 kre Exp $ */ /* * Copyright (c) 1989, 1993 @@ -41,7 +41,7 @@ __COPYRIGHT("@(#) Copyright (c) 1989, 19 #if 0 static char sccsid[] = "@(#)printf.c 8.2 (Berkeley) 3/22/95"; #else -__RCSID("$NetBSD: printf.c,v 1.45 2018/09/04 01:13:50 kre Exp $"); +__RCSID("$NetBSD: printf.c,v 1.46 2018/09/10 14:42:29 kre Exp $"); #endif #endif /* not lint */ @@ -136,6 +136,8 @@ main(int argc, char *argv[]) (void)setlocale (LC_ALL, ""); #endif + rval = 0; /* clear for builtin versions (avoid holdover) */ + while ((o = getopt(argc, argv, "")) != -1) { switch (o) { case '?':