Module Name: src
Committed By: ginsbach
Date: Fri Mar 9 18:54:28 UTC 2012
Modified Files:
src/usr.bin/gencat: gencat.c
Log Message:
Improve the handling of quoted messages.
- warn about messages with an unexpected quote character
- warn about extra characters after a quote character
- warn about an unterminated quoted message
To generate a diff of this commit:
cvs rdiff -u -r1.34 -r1.35 src/usr.bin/gencat/gencat.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/gencat/gencat.c
diff -u src/usr.bin/gencat/gencat.c:1.34 src/usr.bin/gencat/gencat.c:1.35
--- src/usr.bin/gencat/gencat.c:1.34 Thu Dec 29 22:58:27 2011
+++ src/usr.bin/gencat/gencat.c Fri Mar 9 18:54:28 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: gencat.c,v 1.34 2011/12/29 22:58:27 wiz Exp $ */
+/* $NetBSD: gencat.c,v 1.35 2012/03/09 18:54:28 ginsbach Exp $ */
/*
* Copyright (c) 1996 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: gencat.c,v 1.34 2011/12/29 22:58:27 wiz Exp $");
+__RCSID("$NetBSD: gencat.c,v 1.35 2012/03/09 18:54:28 ginsbach Exp $");
#endif
/***********************************************************
@@ -345,11 +345,13 @@ getmsg(int fd, char *cptr, char quote)
{
static char *msg = NULL;
static size_t msglen = 0;
- size_t clen, i;
+ size_t clen, i;
+ int in_quote = 0;
char *tptr;
if (quote && *cptr == quote) {
++cptr;
+ in_quote = 1;
}
clen = strlen(cptr) + 1;
@@ -366,11 +368,26 @@ getmsg(int fd, char *cptr, char quote)
if (quote && *cptr == quote) {
char *tmp;
tmp = cptr + 1;
- if (*tmp && (!isspace((unsigned char) *tmp) || *wskip(tmp))) {
+ if (!in_quote) {
+ /* XXX hard error? */
warning(cptr, "unexpected quote character, ignoring");
*tptr++ = *cptr++;
} else {
- *cptr = '\0';
+ cptr++;
+ /* don't use wskip() */
+ while (*cptr && isspace((unsigned char) *cptr))
+#ifndef _BACKWARDS_COMPAT
+ cptr++;
+#else
+ *tptr++ = *cptr++;
+#endif
+ /* XXX hard error? */
+ if (*cptr)
+ warning(tmp, "unexpected extra characters, ignoring");
+ in_quote = 0;
+#ifndef _BACKWARDS_COMPAT
+ break;
+#endif
}
} else {
if (*cptr == '\\') {
@@ -437,6 +454,10 @@ getmsg(int fd, char *cptr, char quote)
}
}
}
+
+ if (in_quote)
+ warning(cptr, "unterminated quoted message, ignoring");
+
*tptr = '\0';
return (msg);
}