use strlcpy, from openbsd

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@12050 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2003-04-16 16:28:03 +00:00
parent d1604b3dc5
commit 815445af73
3 changed files with 18 additions and 11 deletions

View File

@@ -199,7 +199,7 @@ otp_put (void *v, OtpContext *ctx)
if (rem < len)
return -1;
strcpy (p, ctx->alg->name);
strlcpy (p, ctx->alg->name, rem);
p += len;
rem -= len;
@@ -224,7 +224,7 @@ otp_put (void *v, OtpContext *ctx)
len = strlen(ctx->seed) + 1;
if (rem < len)
return -1;
strcpy (p, ctx->seed);
strlcpy (p, ctx->seed, rem);
p += len;
rem -= len;
dat.dptr = buf;

View File

@@ -251,11 +251,12 @@ getent(char **cap, size_t *len, char **db_array, int fd,
* Check if we have a top record from cgetset().
*/
if (depth == 0 && toprec != NULL && cgetmatch(toprec, name) == 0) {
if ((record = malloc (topreclen + BFRAG)) == NULL) {
size_t len = topreclen + BFRAG;
if ((record = malloc (len)) == NULL) {
errno = ENOMEM;
return (-2);
}
(void)strcpy(record, toprec); /* XXX: strcpy is safe */
(void)strlcpy(record, toprec, len);
db_p = db_array;
rp = record + topreclen + 1;
r_end = rp + BFRAG;

View File

@@ -166,6 +166,8 @@ parse_record(const unsigned char *data, const unsigned char *end_data,
break;
case T_MX:
case T_AFSDB:{
size_t hostlen;
status = dn_expand(data, end_data, p + 2, host, sizeof(host));
if(status < 0){
free(*rr);
@@ -176,17 +178,19 @@ parse_record(const unsigned char *data, const unsigned char *end_data,
return -1;
}
hostlen = strlen(host);
(*rr)->u.mx = (struct mx_record*)malloc(sizeof(struct mx_record) +
strlen(host));
hostlen);
if((*rr)->u.mx == NULL) {
free(*rr);
return -1;
}
(*rr)->u.mx->preference = (p[0] << 8) | p[1];
strcpy((*rr)->u.mx->domain, host);
strlcpy((*rr)->u.mx->domain, host, hostlen);
break;
}
case T_SRV:{
size_t hostlen;
status = dn_expand(data, end_data, p + 6, host, sizeof(host));
if(status < 0){
free(*rr);
@@ -197,9 +201,10 @@ parse_record(const unsigned char *data, const unsigned char *end_data,
return -1;
}
hostlen = strlen(host);
(*rr)->u.srv =
(struct srv_record*)malloc(sizeof(struct srv_record) +
strlen(host));
hostlen);
if((*rr)->u.srv == NULL) {
free(*rr);
return -1;
@@ -207,7 +212,7 @@ parse_record(const unsigned char *data, const unsigned char *end_data,
(*rr)->u.srv->priority = (p[0] << 8) | p[1];
(*rr)->u.srv->weight = (p[2] << 8) | p[3];
(*rr)->u.srv->port = (p[4] << 8) | p[5];
strcpy((*rr)->u.srv->target, host);
strlcpy((*rr)->u.srv->target, host, hostlen);
break;
}
case T_TXT:{
@@ -247,7 +252,7 @@ parse_record(const unsigned char *data, const unsigned char *end_data,
break;
}
case T_SIG : {
size_t sig_len;
size_t sig_len, hostlen;
if(size <= 18) {
free(*rr);
@@ -269,8 +274,9 @@ parse_record(const unsigned char *data, const unsigned char *end_data,
don't you just love C?
*/
sig_len = size - 18 - status;
hostlen = strlen(host);
(*rr)->u.sig = malloc(sizeof(*(*rr)->u.sig)
+ strlen(host) + sig_len);
+ hostlen + sig_len);
if ((*rr)->u.sig == NULL) {
free(*rr);
return -1;
@@ -288,7 +294,7 @@ parse_record(const unsigned char *data, const unsigned char *end_data,
(*rr)->u.sig->sig_len = sig_len;
memcpy ((*rr)->u.sig->sig_data, p + 18 + status, sig_len);
(*rr)->u.sig->signer = &(*rr)->u.sig->sig_data[sig_len];
strcpy((*rr)->u.sig->signer, host);
strlcpy((*rr)->u.sig->signer, host, hostlen);
break;
}