Nmap Security Scanner
*Intro
*Ref Guide
*Install Guide
*Download
*Changelog
*Book
*Docs
Security Lists
*Nmap Hackers
*Nmap Dev
*Bugtraq
*Full Disclosure
*Pen Test
*Basics
*More
Security Tools
*Pass crackers
*Sniffers
*Vuln Scanners
*Web scanners
*Wireless
*Exploitation
*Packet crafters
*More
Site News
Site Search:
Exploit World
Advertising
About/Contact
Credits
Sponsors:
edgeos



Bugtraq: Re: strcpy versus strncpy

Re: strcpy versus strncpy

From: Chris L. Mason <cmason_at_WYREX.COM>
Date: Tue, 3 Mar 1998 23:38:18 -0500

>
> It is kalled SIGSEGV ...
> Because strlen is simply an
> size_t i; char *string;
> for(i=0;*(string+i)!='\0';i++);
> return i;
>
> And when (string+1) points outside the space allocated .. well .. possible
> it doesn't find a '\0' there .. possible it don't even can read it ..
>
> And thats why you can't do that.

Good point. Here's a revised version (also incorporating other suggestions
made)

size_t sstrlen(const char *s, size_t n) {
    size_t i;

    for(i = 0; (*(s+i) != '\0' && i < n); i++);

        return i;
}

char *sstrncpy(char *dst, size_t n1, const char *src, size_t n2) {
    if (sstrlen(src, n2) > (n1 - 1)) {
        errno = ENOSPC;
        dst[0] = NULL;
        return NULL;
    }

    strncpy(dst, src, n2);

    return dst;
}

Something similar could be done with strncat as well. Note that I
don't return the number of bytes written because I wanted to remain
consistent with the existing strncpy.

Chris
Received on Mar 04 1998

[ Nmap | Sec Tools | Mailing Lists | Site News | About/Contact | Advertising | Privacy ]
edgeos