summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2010-01-07 10:24:43 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2010-01-07 10:24:43 +0000
commit6466111df5df8fb77f988c2df0c4fdff141c2cf2 (patch)
treeffb2abd9dd3fdeca12775f9dd990fc1811426456
parent2cc9df49aa3cd600a0b05463454254f8b25ef6c3 (diff)
downloadmandoc-6466111df5df8fb77f988c2df0c4fdff141c2cf2.tar.gz
mandoc-6466111df5df8fb77f988c2df0c4fdff141c2cf2.tar.zst
mandoc-6466111df5df8fb77f988c2df0c4fdff141c2cf2.zip
Check for white-space at the end of free-form text. Lack of check spotted by Jason McIntyre.
-rw-r--r--man.c28
-rw-r--r--mdoc.c17
2 files changed, 40 insertions, 5 deletions
diff --git a/man.c b/man.c
index 8e9165f2..c3e5a894 100644
--- a/man.c
+++ b/man.c
@@ -1,4 +1,4 @@
-/* $Id: man.c,v 1.48 2010/01/07 10:05:24 kristaps Exp $ */
+/* $Id: man.c,v 1.49 2010/01/07 10:24:43 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -365,6 +365,7 @@ static int
man_ptext(struct man *m, int line, char *buf)
{
int i, j;
+ char sv;
/* Literal free-form text whitespace is preserved. */
@@ -379,7 +380,11 @@ man_ptext(struct man *m, int line, char *buf)
for (i = 0; ' ' == buf[i]; i++)
/* Skip leading whitespace. */ ;
- if (0 == buf[i]) {
+ if ('\0' == buf[i]) {
+ /* Trailing whitespace? */
+ if (i && ' ' == buf[i - 1])
+ if ( ! man_pwarn(m, line, i - 1, WTSPACE))
+ return(0);
if ( ! pstring(m, line, 0, &buf[i], 0))
return(0);
goto descope;
@@ -393,15 +398,30 @@ man_ptext(struct man *m, int line, char *buf)
if (i && ' ' == buf[i] && '\\' == buf[i - 1])
continue;
- buf[i++] = 0;
+ sv = buf[i];
+ buf[i++] = '\0';
+
if ( ! pstring(m, line, j, &buf[j], (size_t)(i - j)))
return(0);
+ /* Trailing whitespace? Check at overwritten byte. */
+
+ if (' ' == sv && '\0' == buf[i])
+ if ( ! man_pwarn(m, line, i - 1, WTSPACE))
+ return(0);
+
for ( ; ' ' == buf[i]; i++)
/* Skip trailing whitespace. */ ;
j = i;
- if (0 == buf[i])
+
+ /* Trailing whitespace? */
+
+ if (' ' == buf[i - 1] && '\0' == buf[i])
+ if ( ! man_pwarn(m, line, i - 1, WTSPACE))
+ return(0);
+
+ if ('\0' == buf[i])
break;
}
diff --git a/mdoc.c b/mdoc.c
index 3dc159e6..96b4bffd 100644
--- a/mdoc.c
+++ b/mdoc.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc.c,v 1.115 2010/01/07 10:05:24 kristaps Exp $ */
+/* $Id: mdoc.c,v 1.116 2010/01/07 10:24:43 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -581,6 +581,7 @@ static int
parsetext(struct mdoc *m, int line, char *buf)
{
int i, j;
+ char sv;
if (SEC_NONE == m->lastnamed)
return(mdoc_perr(m, line, 0, ETEXTPROL));
@@ -614,15 +615,29 @@ parsetext(struct mdoc *m, int line, char *buf)
if (i && ' ' == buf[i] && '\\' == buf[i - 1])
continue;
+ sv = buf[i];
buf[i++] = '\0';
if ( ! pstring(m, line, j, &buf[j], (size_t)(i - j)))
return(0);
+ /* Trailing whitespace? Check at overwritten byte. */
+
+ if (' ' == sv && '\0' == buf[i])
+ if ( ! mdoc_pwarn(m, line, i - 1, ETAILWS))
+ return(0);
+
for ( ; ' ' == buf[i]; i++)
/* Skip trailing whitespace. */ ;
j = i;
+
+ /* Trailing whitespace? */
+
+ if (' ' == buf[i - 1] && '\0' == buf[i])
+ if ( ! mdoc_pwarn(m, line, i - 1, ETAILWS))
+ return(0);
+
if ('\0' == buf[i])
break;
}