*
* Result:
*\li Success
- *\li Resource Limit: Not enough memory
+ *\li Not Implemented
+ *\li Unexpected end of input
*/
void
static inline void *
mem_maybedup(isc_mem_t *mctx, void *source, size_t length) {
- void *copy;
+ void *copy = NULL;
+
+ REQUIRE(source != NULL);
if (mctx == NULL) {
return (source);
}
+
copy = isc_mem_allocate(mctx, length);
memmove(copy, source, length);
*/
INSIST(sr.length >= tsig->siglen);
tsig->signature = mem_maybedup(mctx, sr.base, tsig->siglen);
- if (tsig->signature == NULL) {
- goto cleanup;
- }
isc_region_consume(&sr, tsig->siglen);
/*
*/
INSIST(sr.length == tsig->otherlen);
tsig->other = mem_maybedup(mctx, sr.base, tsig->otherlen);
- if (tsig->other == NULL) {
- goto cleanup;
- }
tsig->mctx = mctx;
return (ISC_R_SUCCESS);
-
-cleanup:
- if (mctx != NULL) {
- dns_name_free(&tsig->algorithm, tsig->mctx);
- }
- if (mctx != NULL && tsig->signature != NULL) {
- isc_mem_free(mctx, tsig->signature);
- }
- return (ISC_R_NOMEMORY);
}
static inline void
if (region.length != 0) {
amtrelay->data = mem_maybedup(mctx, region.base,
region.length);
- if (amtrelay->data == NULL) {
- return (ISC_R_NOMEMORY);
- }
}
amtrelay->length = region.length;
}
return (ISC_R_UNEXPECTEDEND);
}
caa->tag = mem_maybedup(mctx, sr.base, caa->tag_len);
- if (caa->tag == NULL) {
- return (ISC_R_NOMEMORY);
- }
isc_region_consume(&sr, caa->tag_len);
/*
*/
caa->value_len = sr.length;
caa->value = mem_maybedup(mctx, sr.base, sr.length);
- if (caa->value == NULL) {
- return (ISC_R_NOMEMORY);
- }
caa->mctx = mctx;
return (ISC_R_SUCCESS);
cert->length = region.length;
cert->certificate = mem_maybedup(mctx, region.base, region.length);
- if (cert->certificate == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
cert->mctx = mctx;
return (ISC_R_SUCCESS);
}
csync->len = region.length;
csync->typebits = mem_maybedup(mctx, region.base, region.length);
- if (csync->typebits == NULL) {
- goto cleanup;
- }
-
csync->mctx = mctx;
return (ISC_R_SUCCESS);
-
-cleanup:
- return (ISC_R_NOMEMORY);
}
static inline void
isc_region_consume(®ion, 1);
INSIST(doa->mediatype_len <= region.length);
doa->mediatype = mem_maybedup(mctx, region.base, doa->mediatype_len);
- if (doa->mediatype == NULL) {
- goto cleanup;
- }
isc_region_consume(®ion, doa->mediatype_len);
/*
doa->data = NULL;
if (doa->data_len > 0) {
doa->data = mem_maybedup(mctx, region.base, doa->data_len);
- if (doa->data == NULL) {
- goto cleanup;
- }
isc_region_consume(®ion, doa->data_len);
}
doa->mctx = mctx;
return (ISC_R_SUCCESS);
-
-cleanup:
- if (mctx != NULL && doa->mediatype != NULL) {
- isc_mem_free(mctx, doa->mediatype);
- }
- return (ISC_R_NOMEMORY);
}
static inline void
ds->length = region.length;
ds->digest = mem_maybedup(mctx, region.base, region.length);
- if (ds->digest == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
ds->mctx = mctx;
return (ISC_R_SUCCESS);
}
gpos->long_len = uint8_fromregion(®ion);
isc_region_consume(®ion, 1);
gpos->longitude = mem_maybedup(mctx, region.base, gpos->long_len);
- if (gpos->longitude == NULL) {
- return (ISC_R_NOMEMORY);
- }
isc_region_consume(®ion, gpos->long_len);
gpos->lat_len = uint8_fromregion(®ion);
isc_region_consume(®ion, 1);
gpos->latitude = mem_maybedup(mctx, region.base, gpos->lat_len);
- if (gpos->latitude == NULL) {
- goto cleanup_longitude;
- }
isc_region_consume(®ion, gpos->lat_len);
gpos->alt_len = uint8_fromregion(®ion);
isc_region_consume(®ion, 1);
if (gpos->lat_len > 0) {
gpos->altitude = mem_maybedup(mctx, region.base, gpos->alt_len);
- if (gpos->altitude == NULL) {
- goto cleanup_latitude;
- }
} else {
gpos->altitude = NULL;
}
gpos->mctx = mctx;
return (ISC_R_SUCCESS);
-
-cleanup_latitude:
- if (mctx != NULL && gpos->longitude != NULL) {
- isc_mem_free(mctx, gpos->longitude);
- }
-
-cleanup_longitude:
- if (mctx != NULL && gpos->latitude != NULL) {
- isc_mem_free(mctx, gpos->latitude);
- }
- return (ISC_R_NOMEMORY);
}
static inline void
hinfo->cpu_len = uint8_fromregion(®ion);
isc_region_consume(®ion, 1);
hinfo->cpu = mem_maybedup(mctx, region.base, hinfo->cpu_len);
- if (hinfo->cpu == NULL) {
- return (ISC_R_NOMEMORY);
- }
isc_region_consume(®ion, hinfo->cpu_len);
hinfo->os_len = uint8_fromregion(®ion);
isc_region_consume(®ion, 1);
hinfo->os = mem_maybedup(mctx, region.base, hinfo->os_len);
- if (hinfo->os == NULL) {
- goto cleanup;
- }
-
hinfo->mctx = mctx;
return (ISC_R_SUCCESS);
-
-cleanup:
- if (mctx != NULL && hinfo->cpu != NULL) {
- isc_mem_free(mctx, hinfo->cpu);
- }
- return (ISC_R_NOMEMORY);
}
static inline void
hip->hit = hip->key = hip->servers = NULL;
hip->hit = mem_maybedup(mctx, region.base, hip->hit_len);
- if (hip->hit == NULL) {
- goto cleanup;
- }
isc_region_consume(®ion, hip->hit_len);
INSIST(hip->key_len <= region.length);
hip->key = mem_maybedup(mctx, region.base, hip->key_len);
- if (hip->key == NULL) {
- goto cleanup;
- }
isc_region_consume(®ion, hip->key_len);
hip->servers_len = region.length;
if (hip->servers_len != 0) {
hip->servers = mem_maybedup(mctx, region.base, region.length);
- if (hip->servers == NULL) {
- goto cleanup;
- }
}
hip->offset = hip->servers_len;
hip->mctx = mctx;
return (ISC_R_SUCCESS);
-
-cleanup:
- if (hip->hit != NULL) {
- isc_mem_free(mctx, hip->hit);
- }
- if (hip->key != NULL) {
- isc_mem_free(mctx, hip->key);
- }
- if (hip->servers != NULL) {
- isc_mem_free(mctx, hip->servers);
- }
- return (ISC_R_NOMEMORY);
}
static inline void
if (ipseckey->keylength != 0U) {
ipseckey->key = mem_maybedup(mctx, region.base,
ipseckey->keylength);
- if (ipseckey->key == NULL) {
- if (ipseckey->gateway_type == 3) {
- dns_name_free(&ipseckey->gateway,
- ipseckey->mctx);
- }
- return (ISC_R_NOMEMORY);
- }
} else {
ipseckey->key = NULL;
}
isdn->isdn_len = uint8_fromregion(&r);
isc_region_consume(&r, 1);
isdn->isdn = mem_maybedup(mctx, r.base, isdn->isdn_len);
- if (isdn->isdn == NULL) {
- return (ISC_R_NOMEMORY);
- }
isc_region_consume(&r, isdn->isdn_len);
if (r.length == 0) {
isc_region_consume(&r, 1);
isdn->subaddress = mem_maybedup(mctx, r.base,
isdn->subaddress_len);
- if (isdn->subaddress == NULL) {
- goto cleanup;
- }
}
isdn->mctx = mctx;
return (ISC_R_SUCCESS);
-
-cleanup:
- if (mctx != NULL && isdn->isdn != NULL) {
- isc_mem_free(mctx, isdn->isdn);
- }
- return (ISC_R_NOMEMORY);
}
static inline void
/* Data */
key->datalen = sr.length;
key->data = mem_maybedup(mctx, sr.base, key->datalen);
- if (key->data == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
key->mctx = mctx;
return (ISC_R_SUCCESS);
}
/* Data */
keydata->datalen = sr.length;
keydata->data = mem_maybedup(mctx, sr.base, keydata->datalen);
- if (keydata->data == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
keydata->mctx = mctx;
return (ISC_R_SUCCESS);
}
isc_region_consume(&r, 1);
INSIST(naptr->flags_len <= r.length);
naptr->flags = mem_maybedup(mctx, r.base, naptr->flags_len);
- if (naptr->flags == NULL) {
- goto cleanup;
- }
isc_region_consume(&r, naptr->flags_len);
naptr->service_len = uint8_fromregion(&r);
isc_region_consume(&r, 1);
INSIST(naptr->service_len <= r.length);
naptr->service = mem_maybedup(mctx, r.base, naptr->service_len);
- if (naptr->service == NULL) {
- goto cleanup;
- }
isc_region_consume(&r, naptr->service_len);
naptr->regexp_len = uint8_fromregion(&r);
isc_region_consume(&r, 1);
INSIST(naptr->regexp_len <= r.length);
naptr->regexp = mem_maybedup(mctx, r.base, naptr->regexp_len);
- if (naptr->regexp == NULL) {
- goto cleanup;
- }
isc_region_consume(&r, naptr->regexp_len);
dns_name_init(&name, NULL);
name_duporclone(&name, mctx, &naptr->replacement);
naptr->mctx = mctx;
return (ISC_R_SUCCESS);
-
-cleanup:
- if (mctx != NULL && naptr->flags != NULL) {
- isc_mem_free(mctx, naptr->flags);
- }
- if (mctx != NULL && naptr->service != NULL) {
- isc_mem_free(mctx, naptr->service);
- }
- if (mctx != NULL && naptr->regexp != NULL) {
- isc_mem_free(mctx, naptr->regexp);
- }
- return (ISC_R_NOMEMORY);
}
static inline void
nsec3->salt_length = uint8_consume_fromregion(®ion);
INSIST(nsec3->salt_length <= region.length);
nsec3->salt = mem_maybedup(mctx, region.base, nsec3->salt_length);
- if (nsec3->salt == NULL) {
- return (ISC_R_NOMEMORY);
- }
isc_region_consume(®ion, nsec3->salt_length);
nsec3->next_length = uint8_consume_fromregion(®ion);
INSIST(nsec3->next_length <= region.length);
nsec3->next = mem_maybedup(mctx, region.base, nsec3->next_length);
- if (nsec3->next == NULL) {
- goto cleanup;
- }
isc_region_consume(®ion, nsec3->next_length);
nsec3->len = region.length;
nsec3->typebits = mem_maybedup(mctx, region.base, region.length);
- if (nsec3->typebits == NULL) {
- goto cleanup;
- }
-
nsec3->mctx = mctx;
return (ISC_R_SUCCESS);
-
-cleanup:
- if (nsec3->next != NULL) {
- isc_mem_free(mctx, nsec3->next);
- }
- isc_mem_free(mctx, nsec3->salt);
- return (ISC_R_NOMEMORY);
}
static inline void
INSIST(nsec3param->salt_length == region.length);
nsec3param->salt = mem_maybedup(mctx, region.base,
nsec3param->salt_length);
- if (nsec3param->salt == NULL) {
- return (ISC_R_NOMEMORY);
- }
isc_region_consume(®ion, nsec3param->salt_length);
nsec3param->mctx = mctx;
nsec->len = region.length;
nsec->typebits = mem_maybedup(mctx, region.base, region.length);
- if (nsec->typebits == NULL) {
- goto cleanup;
- }
-
nsec->mctx = mctx;
return (ISC_R_SUCCESS);
-
-cleanup:
- if (mctx != NULL) {
- dns_name_free(&nsec->next, mctx);
- }
- return (ISC_R_NOMEMORY);
}
static inline void
dns_rdata_toregion(rdata, &r);
null->length = r.length;
null->data = mem_maybedup(mctx, r.base, r.length);
- if (null->data == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
null->mctx = mctx;
return (ISC_R_SUCCESS);
}
nxt->len = region.length;
nxt->typebits = mem_maybedup(mctx, region.base, region.length);
- if (nxt->typebits == NULL) {
- goto cleanup;
- }
-
nxt->mctx = mctx;
return (ISC_R_SUCCESS);
-
-cleanup:
- if (mctx != NULL) {
- dns_name_free(&nxt->next, mctx);
- }
- return (ISC_R_NOMEMORY);
}
static inline void
*/
sig->length = sr.length;
sig->keyring = mem_maybedup(mctx, sr.base, sig->length);
- if (sig->keyring == NULL) {
- goto cleanup;
- }
-
sig->mctx = mctx;
return (ISC_R_SUCCESS);
-
-cleanup:
- return (ISC_R_NOMEMORY);
}
static inline void
dns_rdata_toregion(rdata, &r);
opt->length = r.length;
opt->options = mem_maybedup(mctx, r.base, r.length);
- if (opt->options == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
opt->offset = 0;
opt->mctx = mctx;
return (ISC_R_SUCCESS);
*/
sig->siglen = sr.length;
sig->signature = mem_maybedup(mctx, sr.base, sig->siglen);
- if (sig->signature == NULL) {
- goto cleanup;
- }
-
sig->mctx = mctx;
return (ISC_R_SUCCESS);
-
-cleanup:
- if (mctx != NULL) {
- dns_name_free(&sig->signer, mctx);
- }
- return (ISC_R_NOMEMORY);
}
static inline void
*/
sig->siglen = sr.length;
sig->signature = mem_maybedup(mctx, sr.base, sig->siglen);
- if (sig->signature == NULL) {
- goto cleanup;
- }
-
sig->mctx = mctx;
return (ISC_R_SUCCESS);
-
-cleanup:
- if (mctx != NULL) {
- dns_name_free(&sig->signer, mctx);
- }
- return (ISC_R_NOMEMORY);
}
static inline void
/* Data */
sink->datalen = sr.length;
sink->data = mem_maybedup(mctx, sr.base, sink->datalen);
- if (sink->data == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
sink->mctx = mctx;
return (ISC_R_SUCCESS);
}
sshfp->length = region.length;
sshfp->digest = mem_maybedup(mctx, region.base, region.length);
- if (sshfp->digest == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
sshfp->mctx = mctx;
return (ISC_R_SUCCESS);
}
*/
INSIST(tkey->keylen + 2U <= sr.length);
tkey->key = mem_maybedup(mctx, sr.base, tkey->keylen);
- if (tkey->key == NULL) {
- goto cleanup;
- }
isc_region_consume(&sr, tkey->keylen);
/*
*/
INSIST(tkey->otherlen <= sr.length);
tkey->other = mem_maybedup(mctx, sr.base, tkey->otherlen);
- if (tkey->other == NULL) {
- goto cleanup;
- }
-
tkey->mctx = mctx;
return (ISC_R_SUCCESS);
-
-cleanup:
- if (mctx != NULL) {
- dns_name_free(&tkey->algorithm, mctx);
- }
- if (mctx != NULL && tkey->key != NULL) {
- isc_mem_free(mctx, tkey->key);
- }
- return (ISC_R_NOMEMORY);
}
static inline void
tlsa->length = region.length;
tlsa->data = mem_maybedup(mctx, region.base, region.length);
- if (tlsa->data == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
tlsa->mctx = mctx;
return (ISC_R_SUCCESS);
}
dns_rdata_toregion(rdata, &r);
txt->txt_len = r.length;
txt->txt = mem_maybedup(mctx, r.base, r.length);
- if (txt->txt == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
txt->offset = 0;
txt->mctx = mctx;
return (ISC_R_SUCCESS);
*/
uri->tgt_len = sr.length;
uri->target = mem_maybedup(mctx, sr.base, sr.length);
- if (uri->target == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
uri->mctx = mctx;
return (ISC_R_SUCCESS);
}
x25->x25_len = uint8_fromregion(&r);
isc_region_consume(&r, 1);
x25->x25 = mem_maybedup(mctx, r.base, x25->x25_len);
- if (x25->x25 == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
x25->mctx = mctx;
return (ISC_R_SUCCESS);
}
zonemd->length = region.length;
zonemd->digest = mem_maybedup(mctx, region.base, region.length);
- if (zonemd->digest == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
zonemd->mctx = mctx;
return (ISC_R_SUCCESS);
}
dns_rdata_toregion(rdata, &r);
apl->apl_len = r.length;
apl->apl = mem_maybedup(mctx, r.base, r.length);
- if (apl->apl == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
apl->offset = 0;
apl->mctx = mctx;
return (ISC_R_SUCCESS);
isc_region_consume(&r, 1);
atma->atma_len = r.length;
atma->atma = mem_maybedup(mctx, r.base, r.length);
- if (atma->atma == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
atma->mctx = mctx;
return (ISC_R_SUCCESS);
}
dns_rdata_toregion(rdata, ®ion);
dhcid->dhcid = mem_maybedup(mctx, region.base, region.length);
- if (dhcid->dhcid == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
dhcid->mctx = mctx;
return (ISC_R_SUCCESS);
}
dns_rdata_toregion(rdata, &r);
eid->eid_len = r.length;
eid->eid = mem_maybedup(mctx, r.base, r.length);
- if (eid->eid == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
eid->mctx = mctx;
return (ISC_R_SUCCESS);
}
dns_rdata_toregion(rdata, &r);
nimloc->nimloc_len = r.length;
nimloc->nimloc = mem_maybedup(mctx, r.base, r.length);
- if (nimloc->nimloc == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
nimloc->mctx = mctx;
return (ISC_R_SUCCESS);
}
dns_rdata_toregion(rdata, &r);
nsap->nsap_len = r.length;
nsap->nsap = mem_maybedup(mctx, r.base, r.length);
- if (nsap->nsap == NULL) {
- return (ISC_R_NOMEMORY);
- }
-
nsap->mctx = mctx;
return (ISC_R_SUCCESS);
}
svcb->svclen = region.length;
svcb->svc = mem_maybedup(mctx, region.base, region.length);
- if (svcb->svc == NULL) {
- if (mctx != NULL) {
- dns_name_free(&svcb->svcdomain, svcb->mctx);
- }
- return (ISC_R_NOMEMORY);
- }
-
svcb->offset = 0;
svcb->mctx = mctx;
isc_region_consume(®ion, 1);
wks->map_len = region.length;
wks->map = mem_maybedup(mctx, region.base, region.length);
- if (wks->map == NULL) {
- return (ISC_R_NOMEMORY);
- }
wks->mctx = mctx;
return (ISC_R_SUCCESS);
}