Re: replace strtok()

Peter Eisentraut <peter@eisentraut.org>

From: Peter Eisentraut <peter@eisentraut.org>
To: Alexander Lakhin <exclusion@gmail.com>, Ranier Vilela <ranier.vf@gmail.com>
Cc: 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-18T09:41:02Z
Lists: pgsql-hackers
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.




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()