]> git.ipfire.org Git - thirdparty/git.git/commitdiff
builtin/help: fix dangling reference to `html_path`
authorPatrick Steinhardt <ps@pks.im>
Thu, 26 Sep 2024 11:46:00 +0000 (13:46 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 27 Sep 2024 15:25:34 +0000 (08:25 -0700)
In `get_html_page_path()` we may end up assigning the return value of
`system_path()` to the global `html_path` variable. But as we also
assign the returned value to `to_free`, we will deallocate its memory
upon returning from the function. Consequently, `html_path` will now
point to deallocated memory.

Fix this issue by instead assigning the value to a separate local
variable.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/help.c

index dc1fbe2b9862df507dc1e077258d3c44048eebef..282ea5721fadb31e6c916eab12605706b56333a0 100644 (file)
@@ -513,23 +513,24 @@ static void show_info_page(const char *page)
 static void get_html_page_path(struct strbuf *page_path, const char *page)
 {
        struct stat st;
+       const char *path = html_path;
        char *to_free = NULL;
 
-       if (!html_path)
-               html_path = to_free = system_path(GIT_HTML_PATH);
+       if (!path)
+               path = to_free = system_path(GIT_HTML_PATH);
 
        /*
         * Check that the page we're looking for exists.
         */
-       if (!strstr(html_path, "://")) {
-               if (stat(mkpath("%s/%s.html", html_path, page), &st)
+       if (!strstr(path, "://")) {
+               if (stat(mkpath("%s/%s.html", path, page), &st)
                    || !S_ISREG(st.st_mode))
                        die("'%s/%s.html': documentation file not found.",
-                               html_path, page);
+                               path, page);
        }
 
        strbuf_init(page_path, 0);
-       strbuf_addf(page_path, "%s/%s.html", html_path, page);
+       strbuf_addf(page_path, "%s/%s.html", path, page);
        free(to_free);
 }