summaryrefslogtreecommitdiffstats
path: root/usr.bin/printf
diff options
context:
space:
mode:
authorpfg <pfg@FreeBSD.org>2014-05-26 14:57:47 +0000
committerpfg <pfg@FreeBSD.org>2014-05-26 14:57:47 +0000
commit1818973ea93ed180c9365102a1bc98b1c6ac912b (patch)
tree0fd26cb8102eaffe99730859bf24977602e9908f /usr.bin/printf
parentc8320ff6e34f49824a9be1c60f4c2d01f77fa330 (diff)
downloadFreeBSD-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.c18
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))
OpenPOWER on IntegriCloud