[BACK]Return to roff.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/roff.c between version 1.288 and 1.293

version 1.288, 2017/01/12 18:02:20 version 1.293, 2017/03/09 15:29:35
Line 1226  deroff(char **dest, const struct roff_node *n)
Line 1226  deroff(char **dest, const struct roff_node *n)
         /* Skip leading whitespace. */          /* Skip leading whitespace. */
   
         for (cp = n->string; *cp != '\0'; cp++) {          for (cp = n->string; *cp != '\0'; cp++) {
                 if (cp[0] == '\\' && strchr(" %&0^|~", cp[1]) != NULL)                  if (cp[0] == '\\' && cp[1] != '\0' &&
                       strchr(" %&0^|~", cp[1]) != NULL)
                         cp++;                          cp++;
                 else if ( ! isspace((unsigned char)*cp))                  else if ( ! isspace((unsigned char)*cp))
                         break;                          break;
         }          }
   
           /* Skip trailing backslash. */
   
           sz = strlen(cp);
           if (sz > 0 && cp[sz - 1] == '\\')
                   sz--;
   
         /* Skip trailing whitespace. */          /* Skip trailing whitespace. */
   
         for (sz = strlen(cp); sz; sz--)          for (; sz; sz--)
                 if ( ! isspace((unsigned char)cp[sz-1]))                  if ( ! isspace((unsigned char)cp[sz-1]))
                         break;                          break;
   
Line 1601  roff_parseln(struct roff *r, int ln, struct buf *buf, 
Line 1608  roff_parseln(struct roff *r, int ln, struct buf *buf, 
                         return ROFF_IGN;                          return ROFF_IGN;
                 while (buf->buf[pos] != '\0' && buf->buf[pos] != ' ')                  while (buf->buf[pos] != '\0' && buf->buf[pos] != ' ')
                         pos++;                          pos++;
                 while (buf->buf[pos] != '\0' && buf->buf[pos] == ' ')                  while (buf->buf[pos] == ' ')
                         pos++;                          pos++;
                 return tbl_read(r->tbl, ln, buf->buf, pos);                  return tbl_read(r->tbl, ln, buf->buf, pos);
         }          }
Line 3031  roff_userdef(ROFF_ARGS)
Line 3038  roff_userdef(ROFF_ARGS)
 {  {
         const char       *arg[9], *ap;          const char       *arg[9], *ap;
         char             *cp, *n1, *n2;          char             *cp, *n1, *n2;
         int               i, ib, ie;          int               expand_count, i, ib, ie;
         size_t            asz, rsz;          size_t            asz, rsz;
   
         /*          /*
Line 3055  roff_userdef(ROFF_ARGS)
Line 3062  roff_userdef(ROFF_ARGS)
          */           */
   
         buf->sz = strlen(r->current_string) + 1;          buf->sz = strlen(r->current_string) + 1;
         n1 = cp = mandoc_malloc(buf->sz);          n1 = n2 = cp = mandoc_malloc(buf->sz);
         memcpy(n1, r->current_string, buf->sz);          memcpy(n1, r->current_string, buf->sz);
           expand_count = 0;
         while (*cp != '\0') {          while (*cp != '\0') {
   
                 /* Scan ahead for the next argument invocation. */                  /* Scan ahead for the next argument invocation. */
Line 3076  roff_userdef(ROFF_ARGS)
Line 3084  roff_userdef(ROFF_ARGS)
                 cp -= 2;                  cp -= 2;
   
                 /*                  /*
                    * Prevent infinite recursion.
                    */
   
                   if (cp >= n2)
                           expand_count = 1;
                   else if (++expand_count > EXPAND_LIMIT) {
                           mandoc_msg(MANDOCERR_ROFFLOOP, r->parse,
                               ln, (int)(cp - n1), NULL);
                           free(buf->buf);
                           buf->buf = n1;
                           return ROFF_IGN;
                   }
   
                   /*
                  * Determine the size of the expanded argument,                   * Determine the size of the expanded argument,
                  * taking escaping of quotes into account.                   * taking escaping of quotes into account.
                  */                   */
Line 3358  roff_strdup(const struct roff *r, const char *p)
Line 3380  roff_strdup(const struct roff *r, const char *p)
         ssz = 0;          ssz = 0;
   
         while ('\0' != *p) {          while ('\0' != *p) {
                 if ('\\' != *p && r->xtab && r->xtab[(int)*p].p) {                  assert((unsigned int)*p < 128);
                   if ('\\' != *p && r->xtab && r->xtab[(unsigned int)*p].p) {
                         sz = r->xtab[(int)*p].sz;                          sz = r->xtab[(int)*p].sz;
                         res = mandoc_realloc(res, ssz + sz + 1);                          res = mandoc_realloc(res, ssz + sz + 1);
                         memcpy(res + ssz, r->xtab[(int)*p].p, sz);                          memcpy(res + ssz, r->xtab[(int)*p].p, sz);

Legend:
Removed from v.1.288  
changed lines
  Added in v.1.293

CVSweb