Commit
5d2e1cc117b introduced some strsep() uses, but it did the
memory management wrong in some cases. We need to keep a separate
pointer to the allocate memory so that we can free it later, because
strsep() advances the pointer we pass to it, and it at the end it
will be NULL, so any free() calls won't do anything.
(This fixes two of the four places changed in commit
5d2e1cc117b. The
other two don't have this problem.)
Reported-by: Alexander Lakhin <exclusion@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/
79692bf9-17d3-41e6-b9c9-
fc8c3944222a@eisentraut.org
if (colors)
{
char *token;
+ char *cp = colors;
- while ((token = strsep(&colors, ":")))
+ while ((token = strsep(&cp, ":")))
{
char *e = strchr(token, '=');
static void
split_to_stringlist(const char *s, const char *delim, _stringlist **listhead)
{
- char *sc = pg_strdup(s);
char *token;
+ char *sc;
+ char *tofree;
+
+ tofree = sc = pg_strdup(s);
while ((token = strsep(&sc, delim)))
{
add_stringlist_item(listhead, token);
}
- free(sc);
+ free(tofree);
}
/*