On 2026-Jan-15, Euler Taveira wrote:

> @@ -1275,10 +1279,16 @@ check_log_min_messages(char **newval, void **extra, 
> GucSource source)
>       char       *rawstring;
>       List       *elemlist;
>       ListCell   *l;
> +     char       *result;
> +     bool            first = true;
>       int                     newlevel[BACKEND_NUM_TYPES];
>       bool            assigned[BACKEND_NUM_TYPES];
>       int                     genericlevel = -1;      /* -1 means not 
> assigned */
>  
> +     result = (char *) guc_malloc(LOG, MAX_LMM_STR_LEN);
> +     if (!result)
> +             return false;
     ...
> +     foreach(l, elemlist)
> +     {
> +             char       *tok = (char *) lfirst(l);
> +
> +             if (first)
> +             {
> +                     strncpy(result, tok, MAX_LMM_STR_LEN);
> +                     first = false;
> +             }
> +             else
> +             {
> +                     strlcat(result, ", ", MAX_LMM_STR_LEN);
> +                     strlcat(result, tok, MAX_LMM_STR_LEN);
> +             }
> +     }

BTW I think this whole MAX_LMM_STR_LEN thing is unnecessary.  It is
probably easy enough to use a StringInfo to create the value
iteratively, then once you know its final length do a guc_malloc() and
strcpy the value there.

-- 
Álvaro Herrera         PostgreSQL Developer  —  https://www.EnterpriseDB.com/
"The Gord often wonders why people threaten never to come back after they've
been told never to return" (www.actsofgord.com)


Reply via email to