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)
|
if (rem < len)
|
||||||
return -1;
|
return -1;
|
||||||
strcpy (p, ctx->alg->name);
|
strlcpy (p, ctx->alg->name, rem);
|
||||||
p += len;
|
p += len;
|
||||||
rem -= len;
|
rem -= len;
|
||||||
|
|
||||||
@@ -224,7 +224,7 @@ otp_put (void *v, OtpContext *ctx)
|
|||||||
len = strlen(ctx->seed) + 1;
|
len = strlen(ctx->seed) + 1;
|
||||||
if (rem < len)
|
if (rem < len)
|
||||||
return -1;
|
return -1;
|
||||||
strcpy (p, ctx->seed);
|
strlcpy (p, ctx->seed, rem);
|
||||||
p += len;
|
p += len;
|
||||||
rem -= len;
|
rem -= len;
|
||||||
dat.dptr = buf;
|
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().
|
* Check if we have a top record from cgetset().
|
||||||
*/
|
*/
|
||||||
if (depth == 0 && toprec != NULL && cgetmatch(toprec, name) == 0) {
|
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;
|
errno = ENOMEM;
|
||||||
return (-2);
|
return (-2);
|
||||||
}
|
}
|
||||||
(void)strcpy(record, toprec); /* XXX: strcpy is safe */
|
(void)strlcpy(record, toprec, len);
|
||||||
db_p = db_array;
|
db_p = db_array;
|
||||||
rp = record + topreclen + 1;
|
rp = record + topreclen + 1;
|
||||||
r_end = rp + BFRAG;
|
r_end = rp + BFRAG;
|
||||||
|
@@ -166,6 +166,8 @@ parse_record(const unsigned char *data, const unsigned char *end_data,
|
|||||||
break;
|
break;
|
||||||
case T_MX:
|
case T_MX:
|
||||||
case T_AFSDB:{
|
case T_AFSDB:{
|
||||||
|
size_t hostlen;
|
||||||
|
|
||||||
status = dn_expand(data, end_data, p + 2, host, sizeof(host));
|
status = dn_expand(data, end_data, p + 2, host, sizeof(host));
|
||||||
if(status < 0){
|
if(status < 0){
|
||||||
free(*rr);
|
free(*rr);
|
||||||
@@ -176,17 +178,19 @@ parse_record(const unsigned char *data, const unsigned char *end_data,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hostlen = strlen(host);
|
||||||
(*rr)->u.mx = (struct mx_record*)malloc(sizeof(struct mx_record) +
|
(*rr)->u.mx = (struct mx_record*)malloc(sizeof(struct mx_record) +
|
||||||
strlen(host));
|
hostlen);
|
||||||
if((*rr)->u.mx == NULL) {
|
if((*rr)->u.mx == NULL) {
|
||||||
free(*rr);
|
free(*rr);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
(*rr)->u.mx->preference = (p[0] << 8) | p[1];
|
(*rr)->u.mx->preference = (p[0] << 8) | p[1];
|
||||||
strcpy((*rr)->u.mx->domain, host);
|
strlcpy((*rr)->u.mx->domain, host, hostlen);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case T_SRV:{
|
case T_SRV:{
|
||||||
|
size_t hostlen;
|
||||||
status = dn_expand(data, end_data, p + 6, host, sizeof(host));
|
status = dn_expand(data, end_data, p + 6, host, sizeof(host));
|
||||||
if(status < 0){
|
if(status < 0){
|
||||||
free(*rr);
|
free(*rr);
|
||||||
@@ -197,9 +201,10 @@ parse_record(const unsigned char *data, const unsigned char *end_data,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hostlen = strlen(host);
|
||||||
(*rr)->u.srv =
|
(*rr)->u.srv =
|
||||||
(struct srv_record*)malloc(sizeof(struct srv_record) +
|
(struct srv_record*)malloc(sizeof(struct srv_record) +
|
||||||
strlen(host));
|
hostlen);
|
||||||
if((*rr)->u.srv == NULL) {
|
if((*rr)->u.srv == NULL) {
|
||||||
free(*rr);
|
free(*rr);
|
||||||
return -1;
|
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->priority = (p[0] << 8) | p[1];
|
||||||
(*rr)->u.srv->weight = (p[2] << 8) | p[3];
|
(*rr)->u.srv->weight = (p[2] << 8) | p[3];
|
||||||
(*rr)->u.srv->port = (p[4] << 8) | p[5];
|
(*rr)->u.srv->port = (p[4] << 8) | p[5];
|
||||||
strcpy((*rr)->u.srv->target, host);
|
strlcpy((*rr)->u.srv->target, host, hostlen);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case T_TXT:{
|
case T_TXT:{
|
||||||
@@ -247,7 +252,7 @@ parse_record(const unsigned char *data, const unsigned char *end_data,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case T_SIG : {
|
case T_SIG : {
|
||||||
size_t sig_len;
|
size_t sig_len, hostlen;
|
||||||
|
|
||||||
if(size <= 18) {
|
if(size <= 18) {
|
||||||
free(*rr);
|
free(*rr);
|
||||||
@@ -269,8 +274,9 @@ parse_record(const unsigned char *data, const unsigned char *end_data,
|
|||||||
don't you just love C?
|
don't you just love C?
|
||||||
*/
|
*/
|
||||||
sig_len = size - 18 - status;
|
sig_len = size - 18 - status;
|
||||||
|
hostlen = strlen(host);
|
||||||
(*rr)->u.sig = malloc(sizeof(*(*rr)->u.sig)
|
(*rr)->u.sig = malloc(sizeof(*(*rr)->u.sig)
|
||||||
+ strlen(host) + sig_len);
|
+ hostlen + sig_len);
|
||||||
if ((*rr)->u.sig == NULL) {
|
if ((*rr)->u.sig == NULL) {
|
||||||
free(*rr);
|
free(*rr);
|
||||||
return -1;
|
return -1;
|
||||||
@@ -288,7 +294,7 @@ parse_record(const unsigned char *data, const unsigned char *end_data,
|
|||||||
(*rr)->u.sig->sig_len = sig_len;
|
(*rr)->u.sig->sig_len = sig_len;
|
||||||
memcpy ((*rr)->u.sig->sig_data, p + 18 + status, sig_len);
|
memcpy ((*rr)->u.sig->sig_data, p + 18 + status, sig_len);
|
||||||
(*rr)->u.sig->signer = &(*rr)->u.sig->sig_data[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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user