Re: [PATCH]Remove the redundant assignment

From: Heikki Linnakangas <hlinnaka(at)iki(dot)fi>
To: Dagfinn Ilmari Mannsåker <ilmari(at)ilmari(dot)org>, Michael Paquier <michael(at)paquier(dot)xyz>
Cc: Chao Li <li(dot)evan(dot)chao(at)gmail(dot)com>, Feilong Meng <feelingmeng(at)foxmail(dot)com>, pgsql-hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: [PATCH]Remove the redundant assignment
Date: 2025-12-16 14:02:53
Message-ID: 384b7a2d-019d-4209-a401-7efde686c20c@iki.fi
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

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

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Daniil Davydov 2025-12-16 14:15:45 Re: Proposal : Use bump memory context for temp buffers
Previous Message Nazir Bilal Yavuz 2025-12-16 13:58:03 Running GSSAPI / Kerberos tests on Windows