fix a crash when tag could be uninitialized and not set to a fixed buffer tagname - webdump - HTML to plain-text converter for webpages
 (HTM) git clone git://git.codemadness.org/webdump
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 115f7e68eeccd7f1030fc631c52bab35692c6973
 (DIR) parent 64010b2be4bc3845ef07db25f8621c7894fe64bb
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Wed, 22 May 2024 19:12:44 +0200
       
       fix a crash when tag could be uninitialized and not set to a fixed buffer tagname
       
       Reported by pi31415 when he was testing webdump on a binary ZIP file, thanks!
       
       Diffstat:
         M webdump.c                           |      12 +++++++-----
       
       1 file changed, 7 insertions(+), 5 deletions(-)
       ---
 (DIR) diff --git a/webdump.c b/webdump.c
       @@ -1540,6 +1540,8 @@ printlinkrefs(void)
        static void
        incnode(void)
        {
       +        size_t i;
       +
                curnode++;
        
                if (curnode >= MAX_NODE_DEPTH)
       @@ -1553,6 +1555,11 @@ incnode(void)
                        memset(&nodes[ncapnodes], 0, sizeof(*nodes) * NODE_CAP_INC);
                        memset(&nodes_links[ncapnodes], 0, sizeof(*nodes_links) * NODE_CAP_INC);
        
       +                for (i = ncapnodes; i < ncapnodes + NODE_CAP_INC; i++) {
       +                        nodes[i].tag.displaytype = DisplayInline;
       +                        nodes[i].tag.name = nodes[i].tagname; /* assign to use fixed-size buffer */
       +                }
       +
                        ncapnodes += NODE_CAP_INC; /* greedy alloc */
                }
        }
       @@ -1987,8 +1994,6 @@ xmltagstart(XMLParser *p, const char *t, size_t tl)
                cur = &nodes[curnode];
                memset(cur, 0, sizeof(*cur)); /* clear / reset node */
                /* tag defaults */
       -        cur->tag.displaytype = DisplayInline;
       -        cur->tag.name = cur->tagname; /* assign fixed-size buffer */
                strlcpy(cur->tagname, t, sizeof(cur->tagname));
        
                /* force to lowercase */
       @@ -2416,9 +2421,6 @@ main(int argc, char **argv)
                nodes = ecalloc(ncapnodes, sizeof(*nodes));
                nodes_links = ecalloc(ncapnodes, sizeof(*nodes_links));
        
       -        /* top-most document root needs initialization */
       -        nodes[0].tag.name = "";
       -
                parser.xmlattrstart = xmlattrstart;
                parser.xmlattr = xmlattr;
                parser.xmlattrentity = xmlattrentity;