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:
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user