Patchwork Replace strncpy with memccpy to fix -Wstringop-truncation.

login
register
mail settings
Submitter Khem Raj
Date March 23, 2018, 1:07 a.m.
Message ID <20180323010729.41457-1-raj.khem@gmail.com>
Download mbox | patch
Permalink /patch/26437/
State New
Headers show

Comments

Khem Raj - March 23, 2018, 1:07 a.m.
* nis/nss_nisplus/nisplus-parser.c: Replace strncpy with memcpy to
	avoid -Wstringop-truncation.
---
2018-03-22  Khem Raj  <raj.khem@gmail.com>

        * nis/nss_nisplus/nisplus-parser.c (_nss_nisplus_parse_pwent): Replace
        strncpy with memcpy to avoid -Wstringop-truncation.

 nis/nss_nisplus/nisplus-parser.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
Joseph Myers - March 23, 2018, 1:17 a.m.
On Thu, 22 Mar 2018, Khem Raj wrote:

> 	* nis/nss_nisplus/nisplus-parser.c: Replace strncpy with memcpy to
> 	avoid -Wstringop-truncation.

Could you give more details of (a) in what circumstances (architecture, 
compiler, etc.) you get this warning and (b) why the truncation is 
correct?

Whatever build failure you got hasn't shown up with build-many-glibcs.py.  
Maybe that should include a configuration with --enable-obsolete-rpc 
--enable-obsolete-nsl to make sure that it tests building those bits of 
code that are disabled by default?
Khem Raj - March 23, 2018, 1:29 a.m.
Hi Joseph

On Thu, Mar 22, 2018 at 6:17 PM, Joseph Myers <joseph@codesourcery.com> wrote:
> On Thu, 22 Mar 2018, Khem Raj wrote:
>
>>       * nis/nss_nisplus/nisplus-parser.c: Replace strncpy with memcpy to
>>       avoid -Wstringop-truncation.
>
> Could you give more details of (a) in what circumstances (architecture,
> compiler, etc.) you get this warning and (b) why the truncation is
> correct?
>
> Whatever build failure you got hasn't shown up with build-many-glibcs.py.
> Maybe that should include a configuration with --enable-obsolete-rpc
> --enable-obsolete-nsl to make sure that it tests building those bits of
> code that are disabled by default?
>

This is seen with gcc/trunk when cross compiling for armv7ve target
and yes --enable-obsolete-rpc is used to configure, I am using
OpenEmbedded build system.

nss_nisplus/nisplus-parser.c:90:7: error: 'strncpy' destination
unchanged after copying no bytes [-Werror=stringop-truncation]
       strncpy (first_unused, numstr, len);
       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nss_nisplus/nisplus-parser.c:106:7: error: 'strncpy' destination
unchanged after copying no bytes [-Werror=stringop-truncation]
       strncpy (first_unused, numstr, len);
       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Stefan Liebler - April 5, 2018, 3:57 p.m.
On 03/23/2018 02:29 AM, Khem Raj wrote:
> Hi Joseph
> 
> On Thu, Mar 22, 2018 at 6:17 PM, Joseph Myers <joseph@codesourcery.com> wrote:
>> On Thu, 22 Mar 2018, Khem Raj wrote:
>>
>>>        * nis/nss_nisplus/nisplus-parser.c: Replace strncpy with memcpy to
>>>        avoid -Wstringop-truncation.
>>
>> Could you give more details of (a) in what circumstances (architecture,
>> compiler, etc.) you get this warning and (b) why the truncation is
>> correct?
>>
>> Whatever build failure you got hasn't shown up with build-many-glibcs.py.
>> Maybe that should include a configuration with --enable-obsolete-rpc
>> --enable-obsolete-nsl to make sure that it tests building those bits of
>> code that are disabled by default?
>>
> 
> This is seen with gcc/trunk when cross compiling for armv7ve target
> and yes --enable-obsolete-rpc is used to configure, I am using
> OpenEmbedded build system.
> 
> nss_nisplus/nisplus-parser.c:90:7: error: 'strncpy' destination
> unchanged after copying no bytes [-Werror=stringop-truncation]
>         strncpy (first_unused, numstr, len);
>         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> nss_nisplus/nisplus-parser.c:106:7: error: 'strncpy' destination
> unchanged after copying no bytes [-Werror=stringop-truncation]
>         strncpy (first_unused, numstr, len);
>         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 
Hi,

I also see those warnings on s390x if build with gcc-head (from today) 
and if glibc is configured with --enable-obsolete-nsl.

Why do we need the strncpy at all?
if (len == 0 && ...)
{
	...
	strncpy (first_unused, numstr, len);
	first_unused[len] = '\0';
	...
}

Bye.
Stefan
Andreas Schwab - April 5, 2018, 4:14 p.m.
On Apr 05 2018, Stefan Liebler <stli@linux.vnet.ibm.com> wrote:

> Why do we need the strncpy at all?
> if (len == 0 && ...)

That's obviously a typo.

Andreas.

Patch

diff --git a/nis/nss_nisplus/nisplus-parser.c b/nis/nss_nisplus/nisplus-parser.c
index 8dc021e73d..b53284f889 100644
--- a/nis/nss_nisplus/nisplus-parser.c
+++ b/nis/nss_nisplus/nisplus-parser.c
@@ -87,7 +87,7 @@  _nss_nisplus_parse_pwent (nis_result *result, struct passwd *pw,
       if (len >= room_left)
 	goto no_more_room;
 
-      strncpy (first_unused, numstr, len);
+      memcpy (first_unused, numstr, len);
       first_unused[len] = '\0';
       numstr = first_unused;
     }
@@ -103,7 +103,7 @@  _nss_nisplus_parse_pwent (nis_result *result, struct passwd *pw,
       if (len >= room_left)
 	goto no_more_room;
 
-      strncpy (first_unused, numstr, len);
+      memcpy (first_unused, numstr, len);
       first_unused[len] = '\0';
       numstr = first_unused;
     }