From: nguyenhu@minatec.inpg.fr Date: Fri, 08 Jun 2012 12:54:23 GMT Subject: Re: [PATCHv6 1/4] Read (but not write) from $XDG_CONFIG_HOME/git/config file Message-ID: <20120608145423.Horde.qT2BG3wdC4BP0fX-GHdFAeA@webmail.minatec.grenoble-inp.fr> In-Reply-To: Erik Faye-Lund a écrit : >> char *mkpathdup(const char *fmt, ...) >> { >>        char *path; >>        struct strbuf sb = STRBUF_INIT; >>        va_list args; >> >>        va_start(args, fmt); >>        strbuf_vaddf(&sb, fmt, args); >>        va_end(args); >>        path = sb.buf; >> >>        strbuf_release(&sb); >>        return xstrdup(cleanup_path(path)); >> >> } > > No, strbuf_release(&sb) frees 'sb.buf', causing 'path' to point to > unallocated memory. You can fix that by doing something along these > lines on top: > > va_end(args); > - path = sb.buf; > + path = xstrdup(cleanup_path(path)); > > strbuf_release(&sb); > - return xstrdup(cleanup_path(path)); > + return path; > } You are right, but I think you rather mean this, no? va_end(args); - path = sb.buf; + path = xstrdup(cleanup_path(sb.buf)); strbuf_release(&sb); - return xstrdup(cleanup_path(path)); + return path; }