Re: replace strtok()
От | Ranier Vilela |
---|---|
Тема | Re: replace strtok() |
Дата | |
Msg-id | CAEudQAqt7=deGjdfQXRjzQA+yAcAuSjkrsVhbmNjs2zcp=Rq-A@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: replace strtok() (Peter Eisentraut <peter@eisentraut.org>) |
Список | pgsql-hackers |
Em qua., 16 de out. de 2024 às 04:45, Peter Eisentraut <peter@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
В списке pgsql-hackers по дате отправления: