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

Reply via email to