Thread

  1. Re: [PATCH]Remove the redundant assignment

    Heikki Linnakangas <hlinnaka@iki.fi> — 2025-12-16T14:02:53Z

    On 16/12/2025 13:16, Dagfinn Ilmari Mannsåker wrote:
    > 
    > A quick grep reveals a bunch of strncpy() calls followed by a '\0'
    > assignment that could be replaced with strlcpy():
    > 
    > $ rg -A1 strncpy|rg -B1 "= '\\\\0';"
    > src/interfaces/libpq/fe-secure-openssl.c:		strncpy(buf, conn->sslpassword, size);
    > src/interfaces/libpq/fe-secure-openssl.c-		buf[size - 1] = '\0';
    
    I'm not sure what exactly this code does, but it seems prudent to zero 
    the unused bytes since we're dealing with a password.
    
    > --
    > src/bin/pgbench/pgbench.c:		strncpy(*script, option, namelen);
    > src/bin/pgbench/pgbench.c-		(*script)[namelen] = '\0';
    
    Yeah, this one could use strlcpy(). Or memcpy(). Or pstrndup().
    
    > --
    > doc/src/sgml/ecpg.sgml:            strncpy(name_buf, v.sqlname.data, v.sqlname.length);
    > doc/src/sgml/ecpg.sgml-            name_buf[v.sqlname.length] = '\0';
    > --
    > doc/src/sgml/ecpg.sgml:                strncpy(name_buf, v.sqlname.data, v.sqlname.length);
    > doc/src/sgml/ecpg.sgml-                name_buf[v.sqlname.length] = '\0';
    > --
    > src/interfaces/ecpg/ecpglib/execute.c:					strncpy(newcopy, (char *) var->value, slen);
    > src/interfaces/ecpg/ecpglib/execute.c-					newcopy[slen] = '\0';
    > --
    > src/interfaces/ecpg/ecpglib/execute.c:					strncpy(mallocedval, (char *) var->value, slen);
    > src/interfaces/ecpg/ecpglib/execute.c-					mallocedval[slen] = '\0';
    > --
    > src/interfaces/ecpg/ecpglib/execute.c:					strncpy(newcopy, variable->arr, variable->len);
    > src/interfaces/ecpg/ecpglib/execute.c-					newcopy[variable->len] = '\0';
    
    I don't know if these depend on the zero-padding...
    
    > --
    > src/backend/utils/adt/name.c:	strncpy(NameStr(*name), str, NAMEDATALEN);
    > src/backend/utils/adt/name.c-	NameStr(*name)[NAMEDATALEN - 1] = '\0';
    
    This one *does* require the zero-padding, there's a comment that says so:
    
    > void
    > namestrcpy(Name name, const char *str)
    > {
    > 	/* NB: We need to zero-pad the destination. */
    > 	strncpy(NameStr(*name), str, NAMEDATALEN);
    > 	NameStr(*name)[NAMEDATALEN - 1] = '\0';
    > }
    
    - Heikki