when splitting a composite word,
authorschwarze <schwarze@openbsd.org>
Mon, 26 Jun 2017 11:04:26 +0000 (11:04 +0000)
committerschwarze <schwarze@openbsd.org>
Mon, 26 Jun 2017 11:04:26 +0000 (11:04 +0000)
do not forget to close the inserted list box

usr.bin/mandoc/eqn.c

index 6b8bb9b..cf860f2 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: eqn.c,v 1.32 2017/06/23 21:04:34 schwarze Exp $ */
+/*     $OpenBSD: eqn.c,v 1.33 2017/06/26 11:04:26 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -720,7 +720,7 @@ static enum rofferr
 eqn_parse(struct eqn_node *ep, struct eqn_box *parent)
 {
        char             sym[64];
-       struct eqn_box  *cur, *nbox;
+       struct eqn_box  *cur, *nbox, *split;
        const char      *cp, *cpn, *start;
        char            *p;
        size_t           sz;
@@ -1116,6 +1116,7 @@ this_tok:
                                break;
                        cpn = p - 1;
                        ccln = CCL_LET;
+                       split = NULL;
                        for (;;) {
                                /* Advance to next character. */
                                cp = cpn++;
@@ -1147,13 +1148,13 @@ this_tok:
                                        parent->last = cur->prev;
                                        parent->args--;
                                        /* Set up a list instead. */
-                                       nbox = eqn_box_alloc(ep, parent);
-                                       nbox->type = EQN_LIST;
+                                       split = eqn_box_alloc(ep, parent);
+                                       split->type = EQN_LIST;
                                        /* Insert the word into the list. */
-                                       nbox->first = nbox->last = cur;
-                                       cur->parent = nbox;
+                                       split->first = split->last = cur;
+                                       cur->parent = split;
                                        cur->prev = NULL;
-                                       parent = nbox;
+                                       parent = split;
                                }
                                /* Append a new text box. */
                                nbox = eqn_box_alloc(ep, parent);
@@ -1170,6 +1171,8 @@ this_tok:
                                cpn = p - 1;
                                ccln = CCL_LET;
                        }
+                       if (split != NULL)
+                               parent = split->parent;
                        break;
                }
                /*