:: Re: [DNG] The D in Systemd stands f…
Top Page
Delete this message
Reply to this message
Author: Adam Borowski
Date:  
To: dng
Subject: Re: [DNG] The D in Systemd stands for 'Dammmmit!'
On Mon, Oct 29, 2018 at 01:28:02PM -0700, Rick Moen wrote:
> Quoting Daniel Taylor (random@???):
>
> > They do, but that's not an excuse for using strcpy().
> >
> > Which they did.
>
> Of course, obviously. You _are_ aware I was merely trying to help by
> pointing out that strncpy (etc.) is suboptimal, right?


Well, it is possible to use strcpy() right. On the other hand, _every_ use
of strncpy() for a C string is a bug.

There are three possibilities:
A> either the string does overflow
B> or it doesn't
C> you know the string's length beforehand


If A>, then you have a nasty non-terminated string that can't be passed to
any function expecting a C string (resulting in a read overflow). Yay a
security hole, crash, or at least corrupted data.

If B>, you waste time clearing the buffer. As there's a static size
(otherwide it'd be C>), there's a good deal of headway. In a typical case
(judging from programs I looked at) you have a string of twelve bytes in a
buffer of 2K... and a clear every single copy. Yay significant slowdown.

If C>, you should have used memcpy() instead. Scanning for a 0 is slower
than a blind loop.

On the other hand, snprintf(), strlcpy() and so on do what naive intuition
says strncpy() would do.


Meow!
--
⢀⣴⠾⠻⢶⣦⠀ Have you heard of the Amber Road? For thousands of years, the
⣾⠁⢰⠒⠀⣿⡁ Romans and co valued amber, hauled through the Europe over the
⢿⡄⠘⠷⠚⠋⠀ mountains and along the Vistula, from Gdańsk. To where it came
⠈⠳⣄⠀⠀⠀⠀ together with silk (judging by today's amber stalls).