On Wed, Sep 23, 2009 at 02:41:23PM +0100, Anselm R Garbe wrote:
Hi,

2009/9/23 Kris Maglione <maglion...@gmail.com>:
On Wed, Sep 23, 2009 at 12:53:35AM +0200, Mark Edgar wrote:

* Fix buffer overrun when using strncpy()

It's really sad to see code using strncpy.

Well strncpy has performance issues on large buffers since it pads the
remainder with null bytes. I agree that it would be better to use
something else, though I don't like your util.c strlcpy solution
because that's calling strncpy as well and does some superflous
double-termination that seems to be unnecessary to me.

Unfortunately, the double-termination isn't superfluous because strncpy doesn't always terminate. Just setting the buffer size 1 byte short doesn't help unless the last byte is already null. I actually chose to use strncpy for LOC reasons, but memcpy isn't much longer:

strlcpy(char *dest, char *src, int len) {
        int n;

        n = strlen(src);
        memcpy(dst, src, n < len ? n : len);
        if(len > 0)
                dst[len-1] = '\0';
}

I'd prefer:

strlcpy(char *dest, char *src, int len) {
        memcpy(dst, src, min(len, strlen(src)));
        dst[n-1] = '\0';
}

but then we'd need min.

I applied both sic.c and util.c temporarily to sic/kris/, I need to
sort out what I'm going to re-use and what not. The state when you
patched sic.c seems to be quite old though... or your patch was quite
big ;)

Yes, it's fairly old, I just didn't get the chance to sync it with tip before I posted it since some of the changes are a bit dramatic.

Well apparently they push the line count to 296

Really?

%sloccount *.c
...
SLOC    Directory       SLOC-by-Language (Sorted)
252     top_dir         ansic=252
...
Total Physical Source Lines of Code (SLOC)                = 252

I shortened it to 251 because I #included util.c

It could actually be made quite a few lines shorter by, e.g., not automatically converting unknown commands to raw commands, etc.

--
Kris Maglione

It is a miracle that curiosity survives formal education.
        --Albert Einstein


Reply via email to