Subject: Re: log_min_messages per backend type

From: Alvaro Herrera <[email-masked]>
Date: Tue, 20 Jan 2026 18:12:00 +0100

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)