Merge remote-tracking branch 'origin/master' into njsf-cov
[sxemacs] / lib-src / etags.c
index cdcc73c..6fd951e 100644 (file)
@@ -6214,7 +6214,7 @@ regex_tag_multiline ()
 {
        char *buffer = filebuf.buffer;
        regexp *rp;
-       char *name;
+       char *name = NULL;
 
        for (rp = p_head; rp != NULL; rp = rp->p_next)
        {
@@ -6267,18 +6267,25 @@ regex_tag_multiline ()
                                while (charno < rp->regs.end[0])
                                        if (buffer[charno++] == '\n')
                                                lineno++, linecharno = charno;
-                               name = rp->name;
-                               if (name[0] == '\0')
+                               if (! rp->name || rp->name[0] == '\0')
                                        name = NULL;
                                else /* make a named tag */
                                        name = substitute (buffer, rp->name, &rp->regs);
                                if (rp->force_explicit_name)
-                                       /* Force explicit tag name, if a name is there. */
+                                       /* Force explicit tag name, if a name
+                                          is there. */
                                        pfnote (name, TRUE, buffer + linecharno,
-                                               charno - linecharno + 1, lineno, linecharno);
-                               else
-                                       make_tag (name, strlen (name), TRUE, buffer + linecharno,
-                                                 charno - linecharno + 1, lineno, linecharno);
+                                               charno - linecharno + 1, lineno, 
+                                               linecharno);
+                               else if(name == NULL)
+                                       abort();
+                               else 
+                                       make_tag (name, strlen (name), TRUE, 
+                                                 buffer + linecharno,
+                                                 charno - linecharno + 1, 
+                                                 lineno, linecharno);
+                               free(name);
+                               name = NULL;
                                break;
                        }
                }