Em qua., 16 de out. de 2024 às 04:45, Peter Eisentraut <pe...@eisentraut.org> escreveu:
> On 15.10.24 14:07, Ranier Vilela wrote: > > I also wonder, if other places touched by 5d2e1cc11 need corrections > > too. > > I played with > > PG_COLOR=always PG_COLORS="error=01;31" .../initdb > > > > and it looks like this free() call in pg_logging_init(): > > char *colors = strdup(pg_colors_env); > > > > if (colors) > > { > > ... > > while ((token = strsep(&colors, ":"))) > > { > > ... > > } > > > > free(colors); > > } > > gets null in colors. > > > > Yeah, I also saw this usage, but I was waiting for a definition for the > > first report. > > The solution IMO, would be the same. > > > > diff --git a/src/common/logging.c b/src/common/logging.c > > index aedd1ae2d8..45b5316d48 100644 > > --- a/src/common/logging.c > > +++ b/src/common/logging.c > > @@ -121,7 +121,7 @@ pg_logging_init(const char *argv0) > > { > > char *token; > > > > - while ((token = strsep(&colors, ":"))) > > + while ((token = strsep(&colors, ":")) != NULL && colors != NULL) > > { > > char *e = strchr(token, '='); > > The advantage of this change is that it would avoid processing > > unnecessary tokens. > > This wouldn't fix anything, I think. If colors is NULL, then strsep() > already returns NULL, so the added code does nothing. > If *colors* is NULL, then the delimiter is not found and strsep will return the entire string **stringp, so the token becomes invalid*. IMO, I think it must be necessary to check if *colors* are NULL too. best regards, Ranier Vilela