diff options
author | pfg <pfg@FreeBSD.org> | 2014-05-26 14:57:47 +0000 |
---|---|---|
committer | pfg <pfg@FreeBSD.org> | 2014-05-26 14:57:47 +0000 |
commit | 1818973ea93ed180c9365102a1bc98b1c6ac912b (patch) | |
tree | 0fd26cb8102eaffe99730859bf24977602e9908f /usr.bin/printf | |
parent | c8320ff6e34f49824a9be1c60f4c2d01f77fa330 (diff) | |
download | FreeBSD-src-1818973ea93ed180c9365102a1bc98b1c6ac912b.zip FreeBSD-src-1818973ea93ed180c9365102a1bc98b1c6ac912b.tar.gz |
printf(1): warn about incomplete uses n$
Reviewed by: jilles
Obtained from: Illumos
MFC after: 2 weeks
Diffstat (limited to 'usr.bin/printf')
-rw-r--r-- | usr.bin/printf/printf.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/usr.bin/printf/printf.c b/usr.bin/printf/printf.c index 956e8a3..5be9d05 100644 --- a/usr.bin/printf/printf.c +++ b/usr.bin/printf/printf.c @@ -244,11 +244,11 @@ printf_doformat(char *fmt, int *rval) /* save format argument */ fargv = gargv; } else { - fargv = NULL; + fargv = NULL; } /* skip to field width */ - while (strchr(skip1, *fmt) != NULL) { + while (*fmt && strchr(skip1, *fmt) != NULL) { *dptr++ = *fmt++; *dptr = 0; } @@ -259,12 +259,19 @@ printf_doformat(char *fmt, int *rval) l = strspn(fmt, digits); if ((l > 0) && (fmt[l] == '$')) { int idx = atoi(fmt); + if (fargv == NULL) { + warnx("incomplete use of n$"); + return (NULL); + } if (idx <= myargc) { gargv = &myargv[idx - 1]; } else { gargv = &myargv[myargc]; } fmt += l + 1; + } else if (fargv != NULL) { + warnx("incomplete use of n$"); + return (NULL); } if (getint(&fieldwidth)) @@ -296,12 +303,19 @@ printf_doformat(char *fmt, int *rval) l = strspn(fmt, digits); if ((l > 0) && (fmt[l] == '$')) { int idx = atoi(fmt); + if (fargv == NULL) { + warnx("incomplete use of n$"); + return (NULL); + } if (idx <= myargc) { gargv = &myargv[idx - 1]; } else { gargv = &myargv[myargc]; } fmt += l + 1; + } else if (fargv != NULL) { + warnx("incomplete use of n$"); + return (NULL); } if (getint(&precision)) |