Re: replace strtok()

Ranier Vilela <ranier.vf@gmail.com>

From: Ranier Vilela <ranier.vf@gmail.com>
To: Peter Eisentraut <peter@eisentraut.org>
Cc: Alexander Lakhin <exclusion@gmail.com>, David Steele <david@pgmasters.net>, Michael Paquier <michael@paquier.xyz>, Tom Lane <tgl@sss.pgh.pa.us>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2024-10-18T11:11:18Z
Lists: pgsql-hackers
Em sex., 18 de out. de 2024 às 06:41, Peter Eisentraut <peter@eisentraut.org>
escreveu:

> On 16.10.24 09:42, Peter Eisentraut wrote:
> > On 15.10.24 14:00, Alexander Lakhin 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.
> >
> > Yes, this is indeed incorrect.  We need to keep a separate pointer to
> > the start of the string to free later.  This matches the example on the
> > strsep man page (https://man.freebsd.org/cgi/man.cgi?strsep(3)).  Patch
> > attached.
>
> I have committed both fixes mentioned in this thread in the last couple
> of days.
>
Thanks.

Thanks Alexander, for the hard work.

best regards,
Ranier Vilela

Commits

  1. Fix memory leaks from incorrect strsep() uses

  2. Fix strsep() use for SCRAM secrets parsing

  3. Replace remaining strtok() with strtok_r()

  4. Windows replacement for strtok_r()

  5. Replace some strtok() with strsep()

  6. Add port/ replacement for strsep()