]> git.cameronkatri.com Git - mandoc.git/commitdiff
Check for white-space at the end of free-form text. Lack of check spotted by Jason...
authorKristaps Dzonsons <kristaps@bsd.lv>
Thu, 7 Jan 2010 10:24:43 +0000 (10:24 +0000)
committerKristaps Dzonsons <kristaps@bsd.lv>
Thu, 7 Jan 2010 10:24:43 +0000 (10:24 +0000)
man.c
mdoc.c

diff --git a/man.c b/man.c
index 8e9165f2ccb7d31686c60c63d52f33b285ddacc2..c3e5a8940ccf560e9e403df6673578e2cb292b46 100644 (file)
--- 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 3dc159e6dce5a3da1c9bccd1a4c09c2845e51865..96b4bffd4c667c06aae55b7fd589ca23c4f7c9e0 100644 (file)
--- 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;
        }